【发布时间】:2024-08-05 04:45:02
【问题描述】:
我正在使用 SimpleMessageListenerContainer 并且遇到问题,即每隔一小时左右队列就会卡住,并且由于未确认的消息而不会处理任何内容。
我确定这是由于未正确捕获但无法追踪问题的错误所致。
我已将确认模式设置为 NONE,这“修复”了问题,但实际上只是隐藏了问题。此外,如果我想抛出 AmqpException 并将消息重新排队,这在确认模式设置为 NONE 时不起作用。
我的问题是如何跟踪队列卡住的问题,有没有办法查看未确认消息的有效负载?或者是否有一种确认模式允许不需要确认但如果抛出异常则重新排队消息?
这是我注册监听器的方式:
final SimpleMessageListenerContainer container = new SimpleMessageListenerContainer();
container.setConnectionFactory(connectionFactory);
container.setQueueNames(queueName);
container.setMessageListener(new MQMessageListenerWrapper(listener));
container.setAcknowledgeMode(AcknowledgeMode.NONE);
container.start();
谢谢。
【问题讨论】:
-
你试过
channel-transacted="true"吗? -
如果您共享配置以重现问题,那就太好了。
-
问题是我无法在本地环境中重新创建它,即使我推送相同的消息!我已经用代码示例更新了问题。
标签: java spring rabbitmq spring-amqp