vas*_*hth 1 spring jmstemplate spring-jms
我有一个场景,我需要停止 spring 的 DefaultMessageListenerContainer,然后再次启动。我有 10 个不同的 DefaultMessageListenerContainer 监听 10 个不同的队列。所有 10 个不同的容器都调用相同消息侦听器类的相同方法。现在我想根据 onMessage 方法中出现的异常停止特定队列的消息侦听器容器。请建议我如何实现上述场景。
下面是我的监听器配置
<bean id="msglistenerForAuditError" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsFactory"/>
<property name="sessionTransacted" value="true"/>
<property name="destinationName" value="test.audit.error2"/>
<property name="messageListener" ref="auditerrorListener" />
</bean>
<bean id="msglistenerForAuditEvent" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="jmsFactory"/>
<property name="sessionTransacted" value="true"/>
<property name="destinationName" value="test.audit.event2"/>
<property name="messageListener" ref="auditerrorListener" />
</bean>
Run Code Online (Sandbox Code Playgroud)
这DefaultMessageListenerContainer是一个生命周期 bean,因此它公开了一个start和 一个stop方法,您可以分别使用它们来启动和停止侦听器。
您可以自己构建一个服务,该服务收集上下文中的所有已知实例,然后您可以循环这些实例以停止容器,例如
@Service
public class MyService {
private final Collection<DefaultMessageListenerContainer> containers;
@Autowired
public MyService(Collection<DefaultMessageListenerContainer> containers) {
this.containers = containers;
}
public void stopAll() {
// iterate over the collection and call "stop()" on each item
}
}
Run Code Online (Sandbox Code Playgroud)
话虽如此:
| 归档时间: |
|
| 查看次数: |
10753 次 |
| 最近记录: |