检测异步JMS MessageConsumer何时出现异常?

时间:2014-01-12 16:11:04

标签: java jms activemq mom

我正在使用带有MessageConsumer的JMS MessageListener处理邮件。如果发生导致MessageConsumer停止接收和处理消息的事情 - 例如,如果底层连接关闭 - 我该如何检测它?似乎没有任何通知机制可以在the spec找到。

我认为这个问题很明确,但如果您希望我发布代码来澄清问题,那就问一下!

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

1 个答案:

答案 0 :(得分:2)

使用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标准的提供商都会支持它。