Динамическая настройка ContainerFactory для динамической очереди JMS с помощью Spring - PullRequest
0 голосов
/ 28 декабря 2018

Мне нужно перейти от простого использования @JmsListener к динамической настройке моих слушателей, чтобы мой пользователь мог настроить приложение, выбирая, какую очередь читать.

Я пытался следовать документации Spring JMS для регистрации конечной точки программы, но есть один аспект, который он не охватывает: как установить ListenerContainerFactory, который я хочу использовать для моего слушателя.

Я пробовал следующее:

@Configuration
@EnableJms
public class JmsConfig implements JmsListenerConfigurer {

    @Autowired
    private JmsListenerEndpointRegistry registry;

    @Overide
    public void configureJmsListeners(JmsListenerEndpointRegistrar register) {
        SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
        endpoint.setId("myJmsEndpoint");
        endpoint.setDestination("TestQueue");
        endpoint.setupListenerContainer(registry.getListenerContainer("myContainerFactory"))
        endpoint.setMessageListener( message -> {
            // handle
        });
        register.registerEndpoint(endpoint)

    }

    @Bean
    public JmsListenerContainerFactory myContainerFactory(ConnectionFactory connectionFactory, DefaultJmsListenerContainerFactoryConfigurer configurer) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        configurer.configure(factory, connectionFactory);
        return factory;
    }

   // Other Connection and Container factories

}

, но я получаю:

java.lang.IllegalArgumentException: Could not configure endpoint with the specified container 'null' Only JMS (org.springframework.jms.listener.AbstractMessageListenerContainer subclass) or JCA (org.springframework.jms.listener.endpoint.JmsMessageEndpointManager) are supported.
    at org.springframework.jms.config.AbstractJmsListenerEndpoint$JcaEndpointConfigurer.configureEndpoint(AbstractJmsListenerEndpoint.java:188)

Я предполагаю, что null, потому что на этом этапеВ Spring до сих пор не созданы бобы (верно?).Какой правильный подход здесь, чтобы сделать эту работу?

Спасибо!

...