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

标签 java jms activemq mom

我正在使用 JMS 处理消息 MessageConsumerMessageListener .如果发生导致 MessageConsumer 停止接收和处理消息的情况——例如,如果底层连接关闭——我如何检测到它?我在 the spec 中似乎找不到任何通知机制.

我认为问题很清楚,但如果您希望我发布代码来澄清问题,尽管问!

以防万一,我使用的是 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 的提供程序都将支持它。

关于java - 检测异步 JMS MessageConsumer 何时出现异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21076984/

相关文章:

java - 获取 "Failed to capture snapshot of input files for task ' :compileJava' "

java - AMQP Qpid Proton - 无法将消息发送到超过 256 个队列

java - 在某些情况下删除小于大于标记的 HTML

java - ubuntu环境下Java连接MS SQL数据库

java - 如何利用 Apache Activemq 的连接池?

jms - wso2 ESB JMS 消息重新传递

transactions - jms异常导致的Glassfish数据库连接泄漏

java - 使用 MultipartFile 发送带有多个附件的电子邮件

java - 为什么不能通过反射访问公共(public)构造函数

java - 并发消费者仍确保顺序