我正在使用MessageConsumer
带有MessageListener
. 如果发生某些事情导致MessageConsumer
停止接收和处理消息——例如,如果底层连接关闭——我如何检测到它?我在规范中似乎没有任何通知机制。
我认为这个问题很清楚,但如果你想让我发布代码来澄清这个问题,那就问吧!
如果它很重要,我使用的是 ActiveMQ 5.8,尽管显然我想要一个不是特定于实现的方案。
我正在使用MessageConsumer
带有MessageListener
. 如果发生某些事情导致MessageConsumer
停止接收和处理消息——例如,如果底层连接关闭——我如何检测到它?我在规范中似乎没有任何通知机制。
我认为这个问题很清楚,但如果你想让我发布代码来澄清这个问题,那就问吧!
如果它很重要,我使用的是 ActiveMQ 5.8,尽管显然我想要一个不是特定于实现的方案。
使用异常监听器
如果 JMS 系统检测到问题,它会调用侦听器的onException
方法:
public class MyConsumer implements ExceptionListener, MessageListener {
private void init(){
Connection connection = ... //create connection
connection.setExceptionListener(this);
connection.start();
}
public void onException(JMSException e){
String errorCode = e.getErrorCode();
Exception ex = e.getLinkedException();
//clean up resources, or, attempt to reconnect
}
public void onMessage(Message m){
...
}
没什么,真的,以上是独立消费者的标准做法;它不是特定于实现的;实际上,恰恰相反,因为它是规范的一部分!所以所有符合 JMS 的提供者都将支持它。