Несколько DefaultMessageListenerContainer для внешних систем - PullRequest
0 голосов
/ 13 января 2019

У меня есть приложение, которое должно взаимодействовать с двумя внешними системами A и B. Поэтому я создаю фактически 2 контейнера, как это:

private DefaultMessageListenerContainer createContainer(Conf conf) {
    DefaultMessageListenerContainer jmsCnr= new DefaultMessageListenerContainer();
    jmsCnr.setConnectionFactory(connectionFactoryAdapter);
    jmsCnr.setDestinationResolver(destinationResolver);
    jmsCnr.setDestinationName(destinationName);
    jmsCnr.setMessageListener(MyClass);
    jmsCnr.initialize();
    return jmsCnr;
}

И создание фабрики соединений происходит следующим образом:

 private ConnectionFactory createConnectionFactory(Conf conf) {
    JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
    JndiTemplate jndiTemplate = getJNDITemplate(conf);
    String connectionFactoryJndiName = conf.getConnectionFactoryJndi();
    jndiObjectFactoryBean.setJndiTemplate(jndiTemplate);
    jndiObjectFactoryBean.setJndiName(connectionFactoryJndiName);
    jndiObjectFactoryBean.setProxyInterface(ConnectionFactory.class);
    jndiObjectFactoryBean.setLookupOnStartup(false);
    try {
        jndiObjectFactoryBean.afterPropertiesSet();
    } catch (NamingException e) {
        e.printStackTrace();
    }
    return (ConnectionFactory) jndiObjectFactoryBean.getObject();
}

После того как контейнеры созданы, я зацикливаюсь на них и вызываю start (). Все работает нормально Мой слушатель получает сообщение в случае, если сообщение отправлено во внешнюю систему A.

Однако, если я настраиваю свой класс запуска для создания двух контейнеров для внешней системы A и для B, я не получаю сообщения из очередей системы A, а из системы B получаются сообщения.

Опять же, я использую Spring-реализации без Spring-контекста, все программно.

Мой вопрос: где я что-то упускаю? Кажется, создание второго экземпляра DefaultMessageListenerContainer для внешней системы B переопределяет предыдущий.

...