Сбой подключения к теме HornetQ, встроенной в JBOSS EAP 6.2

Я пытаюсь удаленно подключиться к теме, настроенной на HornetQ, встроенном в JBOSS EAP 6.2. Я пробовал разные подходы к этому, но все выдавали одну и ту же ошибку:

javax.jms.JMSException: Failed to create session factory
at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:676)
at org.hornetq.jms.client.HornetQConnectionFactory.createTopicConnection(HornetQConnectionFactory.java:196)
at TesteTags.main(TesteTags.java:82)
Caused by: HornetQConnectionTimedOutException[errorType=CONNECTION_TIMEDOUT message=HQ119013: Timed out waiting to receive cluster topology. Group:null]
at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:950)
at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:672)
... 2 more

Я следил за информацией в этом кратком руководстве: Jboss Eap Quickstart: helloworld-jms

Следуйте моему коду:

try {
    final Properties env = new Properties();
    env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.remote.client.InitialContextFactory");
    env.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    env.put(Context.PROVIDER_URL, "remote://localhost:4447");
    env.put(Context.SECURITY_PRINCIPAL, "testuser");
    env.put(Context.SECURITY_CREDENTIALS, "testpassword");

    Context context = new InitialContext(env);
    TopicConnectionFactory factory = (TopicConnectionFactory) context.lookup("jms/RemoteConnectionFactory");
    Topic topic = (Topic) context.lookup("jms/topic/myTopic");


    Connection connection = factory.createTopicConnection("testuser", "testpassword"); // The Error occurred here
    connection.start();
    Session session = connection.createSession(false, TopicSession.AUTO_ACKNOWLEDGE); 
    MessageProducer producer = session.createProducer(topic);

    Message message = session.createTextMessage("My Test Message");

    producer.send(message);

    System.out.println("It Worked!");
} catch (Exception e) {
    System.out.println("It Failed!");
    e.printStackTrace();
}

Я использую профиль standalone-full-ha с конфигурациями по умолчанию.

Я делаю что-то не так в своем коде? Или есть какая-либо конфигурация, отличная от стандартной, которую я должен сделать?


person Caio Duarte    schedule 15.06.2016    source источник


Ответы (2)


Скомпилировали ли вы свой клиентский код с теми же библиотеками HornetQ, которые поставляются с версией JBoss EAP, которую вы используете? Вы должны знать, что существует проблема совместимости версий, которая не позволяет взаимодействовать различным версиям HornetQ.

person Panagiotis Chavariotis    schedule 17.06.2016
comment
Я использую эту библиотеку: jboss-as-jms-client-bom-7.2.0 Во всяком случае, я пробовал разные версии, и это не имело никакого значения. - person Caio Duarte; 17.06.2016

После долгих исследований и испытаний я решил проблему. Во-первых, я изменил зависимость jboss-as-jms-client-bom-7.2.0 на это:

<dependency>
    <groupId>org.jboss.as</groupId>
    <artifactId>jboss-as-jms-client-bom</artifactId>
    <version>7.1.2.Final</version>
    <type>pom</type>
</dependency>

Кроме того, я изменил свой код, чтобы использовать другой подход для подключения к серверу:

Connection connection = null;
Session session = null;
Formatter formatter = new Formatter();
Map<String, Object> connectionParams = new HashMap<String, Object>();
connectionParams.put(TransportConstants.PORT_PROP_NAME, 5445);
connectionParams.put(TransportConstants.HOST_PROP_NAME, "localhost");

TransportConfiguration transportConfiguration = new TransportConfiguration(
    NettyConnectorFactory.class.getName(), connectionParams);

try {
    HornetQConnectionFactory cf = HornetQJMSClient
        .createConnectionFactoryWithHA(JMSFactoryType.CF, transportConfiguration);

    connection = cf.createConnection("testuser", "testpassword");

    connection.start();
    session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

    Topic topicTarifas = session.createTopic("tarifas.01101");
    MessageProducer producer = session.createProducer(topicTarifas);

    Message message = session.createTextMessage("My Test Message");

    producer.send(message);

    System.out.println("It Worked!");
} catch (Exception e) {
    System.out.println("It Failed!");
    e.printStackTrace();
}

Надеюсь, это может быть полезно для кого-то еще :)

person Caio Duarte    schedule 22.06.2016