我正在尝试使用 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 文档 https://www.rabbitmq.com/api-guide.html,客户端应该自动恢复,但我想这些情况的处理方式不同。更糟糕的是,RabbitMQ-JMS 客户端似乎有意设计为阻止我指定自己的 ExceptionHandler 以避免这种行为。
是否有另一种方法可以通过 JMS API 处理此类异常? (我尝试在 jms.Connection 上添加一个 ExceptionListener,但它从未被调用)。
我被困住了吗?我该如何检测我的消费者已死亡并尝试重新连接?我如何确保我的监听器有某种形式的自动恢复?
None
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)