Spring Boot ActiveMQJMSConnectionFactory для подключения к JBoss EAP 6.1 HornetQ - PullRequest
0 голосов
/ 18 июня 2020

Я не уверен, возможно ли то, что я пытаюсь сделать, но в основном я пытаюсь обновить текущую реализацию с HornetQ до ActiveMQ, используя Artemis.

Моя система является потребителем JMS из HornetQ.

Текущая реализация работает, если я использую «HornetQJMSConnectionFactory», но когда я перехожу на ActiveMQJMSConnectionFactory, он не может подключиться.

Чтобы протестировать новую реализацию, я создал локальный экземпляр ActiveMQ и работает с новой реализацией.

Итак, я пробовал несколько разных вещей, включая принудительный протокол = HORNETQ, и ничего не работает.

Нет ошибки компиляции, "только":

ERROR o.s.j.l.DefaultMessageListenerContainer.refreshConnectionUntilSuccessful - Could not refresh JMS Connection for destination 'QueueX' - retrying using FixedBackOff{interval=5000, currentAttempts=1, maxAttempts=unlimited}. Cause: Failed to create session factory; nested exception is ActiveMQConnectionTimedOutException[errorType=CONNECTION_TIMEDOUT message=AMQ219013: Timed out waiting to receive cluster topology. Group:null]

Старый Реализация

private ConnectionFactory createConnectionFactory(SyncProperties.SmpJmsServer jmsServer) {

    final String className = "org.hornetq.core.remoting.impl.netty.NettyConnectorFactory";

    Map<String, Object> params = new HashMap<String, Object>();
    params.put("host", getJmsHost());
    params.put("port", getJmsPort());
    TransportConfiguration transportConfiguration = new TransportConfiguration(className, params);

    HornetQJMSConnectionFactory hornetQJMSConnectionFactory = new HornetQJMSConnectionFactory(false, transportConfiguration);
    hornetQJMSConnectionFactory.setConnectionTTL(300000);
    hornetQJMSConnectionFactory.setConsumerWindowSize(0);
    UserCredentialsConnectionFactoryAdapter adapter = new UserCredentialsConnectionFactoryAdapter();
    adapter.setTargetConnectionFactory(hornetQJMSConnectionFactory);
    adapter.setUsername(getJmsUsername());
    adapter.setPassword(getJmsPassword());
    CachingConnectionFactory smpCachingConnectionFactory = new CachingConnectionFactory(adapter);
    return smpCachingConnectionFactory;
}

Новая реализация

 public ConnectionFactory createActiveMQJMSConnectionFactory()  {

    ActiveMQJMSConnectionFactory activeMQJMSConnectionFactory = new ActiveMQJMSConnectionFactory(false, amqTransportConfiguration());

    activeMQJMSConnectionFactory.setConnectionTTL(300000);
    activeMQJMSConnectionFactory.setConsumerWindowSize(0);

    UserCredentialsConnectionFactoryAdapter adapter = new UserCredentialsConnectionFactoryAdapter();
    adapter.setTargetConnectionFactory(activeMQJMSConnectionFactory);
    adapter.setUsername(getJmsUsername());
    adapter.setPassword(getJmsPassword());
    CachingConnectionFactory smpCachingConnectionFactory = new CachingConnectionFactory(adapter);

    return smpCachingConnectionFactory;
}



@Bean("amqTransportConfiguration")
public TransportConfiguration amqTransportConfiguration() {
    return new TransportConfiguration("org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory", getParams());
}

static Map<String, Object> getParams() {
    Map<String, Object> params = new HashMap<String, Object>();
    params.put("host", getJmsHost());
    params.put("port", getJmsPort());
    return params;
}

Спасибо за помощь.

1 Ответ

1 голос
/ 18 июня 2020

Хотя ActiveMQ Artemis основан на кодовой базе HornetQ, клиент ActiveMQ Artemis не сможет разговаривать с брокером HornetQ. Каждый клиент отправляет идентификатор протокола / клиента при подключении. Этот идентификатор отличается у клиентов ActiveMQ Artemis и клиентов HornetQ. Брокер HornetQ не распознает идентификатор, отправленный клиентом ActiveMQ Artemis, и, следовательно, не завершит рукопожатие.

Тем не менее, мы работали над тем, чтобы клиенты HornetQ все еще могли общаться с брокером ActiveMQ Artemis. Это то, что предоставляет org.apache.activemq.artemis.core.protocol.hornetq.HornetQProtocolManager.

В любом случае, обновление вашего клиента все равно мало что вам даст. Если вы хотите обновить что-либо, я рекомендую вам обновить EAP или даже перейти на автономную версию ActiveMQ Artemis, чтобы вы могли получить последние исправления и функции.

...