HornetQ JMSException: не удалось создать фабрику сеансов

Я пытаюсь напрямую создать экземпляр ресурсов JMS без использования JNDI для REMOTE HORNETQ.

Я запускаю свой тестовый код в Eclipse IDE. Настройте мой путь к классам для использования библиотек HornetQ 2.2.5.

Целевой HornetQ - версия 2.1.2. Final, я подумал, что они должны быть обратно совместимы, может быть, я ошибаюсь?

Итак, я прочитал онлайн-документацию и следовал примерам подключения к удаленному серверу JMS без использования JNDI. Я продолжаю получать следующее исключение. Я не уверен, чего мне не хватает, но я считаю, что все настроил правильно. Может ли кто-нибудь указать, что мне здесь не хватает? Заранее спасибо.

JMSException: не удалось создать фабрику сеансов

Коннектор в hornetq-configuration.xml:

  <connector name="netty">
     <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
          <param key="host"  value="${10.100.111.222}"/>
          <param key="port"  value="${hornetq.remoting.netty.port:5445}"/>
  </connector>

Акцептор это:

  <acceptor name="netty">
     <factory-class>org.hornetq.core.remoting.impl.netty.NettyAcceptorFactory</factory-class>
      <param key="host"  value="${10.100.111.222}"/>
     <param key="port"  value="${hornetq.remoting.netty.port:5445}"/>
  </acceptor>

Мой тестовый код: Connection connection = null;

   try
   {
    Queue queue = HornetQJMSClient.createQueue("TESTQ");

    Map<String, Object> connectionParams = new HashMap<String, Object>();
    connectionParams.put(TransportConstants.PORT_PROP_NAME, 5445);
    connectionParams.put(TransportConstants.HOST_PROP_NAME, "10.100.111.222");        

    TransportConfiguration transportConfiguration = new TransportConfiguration(NettyConnectorFactory.class.getName(),
                                                                               connectionParams);
    ConnectionFactory factory = (ConnectionFactory) HornetQJMSClient.createConnectionFactoryWithoutHA(JMSFactoryType.CF, transportConfiguration);
    System.out.println("debug: " + factory.getClass());

    connection = factory.createConnection();

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

    MessageProducer producer = session.createProducer(queue);

    TextMessage message = session.createTextMessage("This is a test message");
    System.out.println("Sent message: " + message.getText());

    producer.send(message);

   }
      finally
      {
         if (connection != null)
         {
            try {
                connection.close();
            } catch (JMSException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
         }
      }

Я получаю следующее исключение

SEVERE: Failed to create netty connection
java.net.SocketTimeoutException: connect timed out
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.PlainSocketImpl.doConnect(Unknown Source)
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
    at java.net.PlainSocketImpl.connect(Unknown Source)
    at java.net.SocksSocketImpl.connect(Unknown Source)
    at java.net.Socket.connect(Unknown Source)
    at org.jboss.netty.channel.socket.oio.OioClientSocketPipelineSink.connect(OioClientSocketPipelineSink.java:114)
    at org.jboss.netty.channel.socket.oio.OioClientSocketPipelineSink.eventSunk(OioClientSocketPipelineSink.java:74)
    at org.jboss.netty.channel.Channels.connect(Channels.java:541)
    at org.jboss.netty.channel.AbstractChannel.connect(AbstractChannel.java:218)
    at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:227)
    at org.jboss.netty.bootstrap.ClientBootstrap.connect(ClientBootstrap.java:188)
    at org.hornetq.core.remoting.impl.netty.NettyConnector.createConnection(NettyConnector.java:450)
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.getConnection(ClientSessionFactoryImpl.java:1016)
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.getConnectionWithRetry(ClientSessionFactoryImpl.java:897)
    at org.hornetq.core.client.impl.ClientSessionFactoryImpl.connect(ClientSessionFactoryImpl.java:212)
    at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:602)
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:611)
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:121)
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:116)
    at com.ws.proto.ManualJMS.main(ManualJMS.java:39)
Oct 19, 2011 1:18:50 PM org.hornetq.core.logging.impl.JULLogDelegate warn
WARNING: Tried 1 times to connect. Now giving up on reconnecting it.
Exception in thread "main" javax.jms.JMSException: Failed to create session factory
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:615)
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:121)
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnection(HornetQConnectionFactory.java:116)
    at com.ws.proto.ManualJMS.main(ManualJMS.java:39)
Caused by: HornetQException[errorCode=2 message=Cannot connect to server(s). Tried with all available servers.]
    at org.hornetq.core.client.impl.ServerLocatorImpl.createSessionFactory(ServerLocatorImpl.java:619)
    at org.hornetq.jms.client.HornetQConnectionFactory.createConnectionInternal(HornetQConnectionFactory.java:611)
    ... 3 more

person Byron    schedule 19.10.2011    source источник


Ответы (1)


Что касается совместимости: у нас не было совместимости клиентов до версии 2.2.5+. Если вы попробуете клиент на 2.2.2 и сервер на 2.2.5, вы, вероятно, получите исключение несоответствия версии.

Мы стремимся всегда быть совместимыми с 2.2.5+

А у вас опечатка в конфиге:

  <connector name="netty">
     <factory-class>org.hornetq.core.remoting.impl.netty.NettyConnectorFactory</factory-class>
          <param key="host"  value="10.100.111.222"/>
          <param key="port"  value="${hornetq.remoting.netty.port:5445}"/>
  </connector>

Мы используем синтаксис для свойств и значений по умолчанию. Например, вы можете определить переменную MY_IP и использовать ее как:

"${MY_IP:10.100.111.222}"

Если MY_IP равен нулю, вы получите 10.100.111.222.

Но «${10.100.111.222}» ничего не значит.

person Clebert Suconic    schedule 19.10.2011
comment
Пожалуйста, не забудьте принять ответ, если это решит вашу проблему! :) Я пытаюсь набрать очки на SOF (возможно, только ради удовольствия :) ) - person Clebert Suconic; 20.10.2011
comment
Я исправил свою синтаксическую ошибку по вашему примеру и вижу в boot.log, что он правильно связывается. Но я все еще получаю то же сообщение об ошибке. Поскольку клиент использует 2.2.5, совместимость не должна быть проблемой, верно? - person Byron; 20.10.2011
comment
Если сервер и клиент имеют одну и ту же версию, это не должно быть проблемой. если вы не можете подключиться, у вас, вероятно, проблема с сетью. Я вижу, что пример создания экземпляра соединения работает нормально, если я добавлю IP. - person Clebert Suconic; 20.10.2011
comment
Я работаю с сетью в своей компании, чтобы узнать, есть ли проблема с брандмауэром. Спасибо @Клеберт - person Byron; 21.10.2011
comment
Вы должны либо принять ответ, либо сказать мне, если у вас все еще есть проблемы ... Если у вас все еще есть проблемы. Вы можете сделать это на любом другом компьютере, чтобы убедиться в проблемах с брандмауэром. - person Clebert Suconic; 21.10.2011
comment
@Clebert Спасибо, сэр, я использовал ${MY_IP:10.100.111.222}, и он отлично подключается к удаленному серверу Jboss hornetq. Это я добавил для справки других. Я также добавил свой вопрос и ответ здесь. stackoverflow .com/questions/25397138/ - person user2771655; 28.08.2014