Мне нужно перейти от простого использования @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 до сих пор не созданы бобы (верно?).Какой правильный подход здесь, чтобы сделать эту работу?
Спасибо!