如何动态创建多个DefaultMessageListenerContainer实例,并启动监听
时间: 2024-05-03 13:19:18 浏览: 197
Oracle一个实例配置多个监听
要动态创建多个DefaultMessageListenerContainer实例,并启动监听,可以使用Spring的@Autowired注解来注入一个JmsListenerEndpointRegistry实例,并使用它来创建和管理各个监听器容器实例。
首先,在你的Spring配置类中注入JmsListenerEndpointRegistry实例:
```
@Configuration
@EnableJms
public class AppConfig {
@Autowired
private JmsListenerEndpointRegistry endpointRegistry;
// ...
}
```
然后,你可以编写一个方法来动态创建和注册一个DefaultMessageListenerContainer实例,并将其添加到JmsListenerEndpointRegistry中:
```
public void createListenerContainer(String destinationName, MessageListener messageListener) {
DefaultMessageListenerContainer container = new DefaultMessageListenerContainer();
container.setConnectionFactory(connectionFactory());
container.setDestinationName(destinationName);
container.setMessageListener(messageListener);
container.afterPropertiesSet();
endpointRegistry.registerListenerContainer(new MethodJmsListenerEndpoint(messageListener, container));
}
```
在这个方法中,我们创建了一个DefaultMessageListenerContainer实例,并设置了连接工厂、目的地名称和消息监听器。然后,我们将其添加到JmsListenerEndpointRegistry中,使用MethodJmsListenerEndpoint来包装它,并将消息监听器与之关联。
最后,你可以在需要的时候调用这个方法来创建和启动新的监听器容器实例:
```
createListenerContainer("queue1", myMessageListener1);
createListenerContainer("queue2", myMessageListener2);
```
当你想要停止监听器容器时,可以使用JmsListenerEndpointRegistry的unregister方法来注销它:
```
endpointRegistry.unregister(listenerEndpoint);
```
其中listenerEndpoint是在注册监听器容器时使用的MethodJmsListenerEndpoint实例。
阅读全文