检测异步JMS消息使用者何时出现异常



我正在使用带有MessageListener的JMSMessageConsumer处理消息。如果发生了导致MessageConsumer停止接收和处理消息的事情——例如,如果底层连接关闭——我该如何检测它?我在规范中似乎找不到任何通知机制

我认为这个问题很清楚,但如果你想让我发布代码来澄清这个问题,就问吧!

如果这很重要,我将使用ActiveMQ 5.8,尽管显然我想要一个不特定于实现的方案。

使用ExceptionListener

如果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的提供商都将支持它。

最新更新