AMQP 消费者(侦听器适配器 + SimpleMessageListenerContainer)持有消息
AMQP consumer(listener adapter + SimpleMessageListenerContainer) holding message
最近遇到这样一种情况,消息被消费者从队列中取出,但没有到达绑定到该队列的监听器。我们之所以能够做出此断言,是因为我们的侦听器上有一个拦截器(它会打印一条日志消息),但不会为这些消息触发。一旦我们重新启动服务器(tomcat),消息就会被消费和确认。
我们想知道这种行为的原因。我们分析了线程转储但没有成功。
此类问题总是由以下两个问题之一引起:
- 用户代码中的容器线程"stuck"
- 某些网络组件(例如路由器)静默关闭它认为空闲的连接,这样客户端 and/or 服务器不知道连接已关闭。
你似乎已经排除了第一个(假设你的分析是正确的)所以它很可能是第二个。
您可以在连接上启用心跳以避免网络认为连接空闲。请参阅 RabbitMQ 文档。
最近遇到这样一种情况,消息被消费者从队列中取出,但没有到达绑定到该队列的监听器。我们之所以能够做出此断言,是因为我们的侦听器上有一个拦截器(它会打印一条日志消息),但不会为这些消息触发。一旦我们重新启动服务器(tomcat),消息就会被消费和确认。
我们想知道这种行为的原因。我们分析了线程转储但没有成功。
此类问题总是由以下两个问题之一引起:
- 用户代码中的容器线程"stuck"
- 某些网络组件(例如路由器)静默关闭它认为空闲的连接,这样客户端 and/or 服务器不知道连接已关闭。
你似乎已经排除了第一个(假设你的分析是正确的)所以它很可能是第二个。
您可以在连接上启用心跳以避免网络认为连接空闲。请参阅 RabbitMQ 文档。