如何使用RabbitMQ-JMS恢复使用者,或指定自定义异常处理程序?

时间:2017-09-01 20:14:45

标签: java-ee rabbitmq jms

我正在尝试使用RabbitMQ-JMS客户端,故意创建一个长的onMessage()侦听器来查看客户端将如何恢复。

        Context context = new InitialContext();
        rabbitMQ = (RMQConnectionFactory)context.lookup("java:global/jms/ConnectionFactory");
        queue = (Queue)context.lookup("java:global/mq/kodo");

        connection = rabbitMQ.createConnection();
        connection.start();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

        MessageConsumer consumer = session.createConsumer(queue);
        consumer.setMessageListener(new MessageListener() {

            @Override
            public void onMessage(Message message) {
                Thread.sleep(20000);
            }
        });

我看到DeliveryExecutor类在处理消息时有超时,并且在其异常处理程序中,它所做的一件事就是关闭通道,从而放弃了我的消费者。

基于RabbitMQ docs,客户端应该自动恢复,但我猜这些情况的处理方式不同。更糟糕的是,RabbitMQ-JMS客户端似乎是故意设计的,以防止我指定自己的ExceptionHandler来避免这种行为。

有没有其他方法可以通过JMS API处理这种异常处理? (我尝试在jms.Connection上添加了一个ExceptionListener,但它永远不会被调用)。

我被困了吗?我怎么能发现我的消费者死了并试图重新连接?如何确保我的听众有某种形式的自动恢复?

0 个答案:

没有答案