5

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

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

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

4

1 回答 1

2

使用异常监听器

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

于 2014-01-13T04:23:39.497 回答