面对生产系统的问题,其中1条消息未被确认30分钟,导致消费者关机。现在我已经添加了shutdownlistener,如rabbit mq docs -https://rabbitmq.github.io/rabbitmq-java-client/api/4.x.x/com/rabbitmq/client/ShutdownListener.html中所述
if (cause.isHardError()) {
log.error("Connection error with cause : {}", cause);
Connection conn = (Connection) cause.getReference();
if (!cause.isInitiatedByApplication()) {
Method reason = cause.getReason();
log.error("Rabbit Mq Consumer Connection Shutdown : {} {}", reason, cause);
}
} else{
Channel ch = (Channel)cause.getReference();
log.error("Channel error details : {}", ch);
}
});
字符串
问题是它在测试中根本没有被调用。我试过两种方法来触发-
1.通过未确认的传递超时。基本上抛出了一个一般的excption,从来没有acked它(这些是错误的原始条件)。然而,这并不奏效。
1.我使用channel.close()关闭消费者,但仍然没有收到事件。
寻找任何方法来复制我所面临的问题和测试/触发shutdownlisteners。谢啦,谢啦
1条答案
按热度按时间nbysray51#
我知道这可能是一个迟来的答案,但我发现了一个简单的方法是保持消费者连接到rabbitmq经纪人,只需手动断开我的互联网连接几秒钟,然后重新连接。
之后,
shudown handler
被触发。