Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 持有消息的AMQP使用者(侦听器适配器和SimpleMessageListenerContainer)_Java_Rabbitmq_Amqp_Spring Amqp - Fatal编程技术网

Java 持有消息的AMQP使用者(侦听器适配器和SimpleMessageListenerContainer)

Java 持有消息的AMQP使用者(侦听器适配器和SimpleMessageListenerContainer),java,rabbitmq,amqp,spring-amqp,Java,Rabbitmq,Amqp,Spring Amqp,最近,我们遇到了这样一种情况:消息被消费者从队列中接收,但没有到达绑定到该队列的侦听器。我们之所以能够做出这个断言,是因为我们的侦听器上有一个没有为这些消息触发的拦截器(它打印日志消息)。当我们重新启动服务器(tomcat)时,消息被消费并确认 我们想知道这种行为的原因。我们分析了线程转储,但没有成功。此类问题总是由以下两个问题之一引起的: 容器线程“卡在”用户代码中 某些网络组件(如路由器)会静默关闭其认为空闲的连接,这样客户端和/或服务器就不会意识到该连接已关闭 你似乎已经排除了第一个(

最近,我们遇到了这样一种情况:消息被消费者从队列中接收,但没有到达绑定到该队列的侦听器。我们之所以能够做出这个断言,是因为我们的侦听器上有一个没有为这些消息触发的拦截器(它打印日志消息)。当我们重新启动服务器(tomcat)时,消息被消费并确认


我们想知道这种行为的原因。我们分析了线程转储,但没有成功。

此类问题总是由以下两个问题之一引起的:

  • 容器线程“卡在”用户代码中
  • 某些网络组件(如路由器)会静默关闭其认为空闲的连接,这样客户端和/或服务器就不会意识到该连接已关闭
你似乎已经排除了第一个(假设你的分析是正确的),所以很可能是第二个


您可以在连接上启用心跳,以避免网络认为连接处于空闲状态。请参阅RabbitMQ文档。

如果能看到有关此问题的配置和调试日志,那将非常好。在日志中,请告诉我们,您确定应该在哪里使用消息。嗨,Gary,我们在连接上设置了心跳,我们确信情况并非如此,因为此连接上的其他侦听器工作得非常好。只有在某些队列中,消息才会被卡住,正如所说的,这些消息已经到达消费者端,但侦听器尚未接收到。当您指出这种行为只有两个原因时,我们将再次查看线程转储。