【发布时间】:2013-12-13 21:14:34
【问题描述】:
当消费者阻止接收来自 SharedQueue 的消息时,我收到以下异常:
Unhandled Exception: System.IO.EndOfStreamException: SharedQueue closed
at RabbitMQ.Util.SharedQueue.EnsureIsOpen()
at RabbitMQ.Util.SharedQueue.Dequeue()
at Consumer.Program.Main(String[] args) in c:\Users\pdecker\Documents\Visual
Studio 2012\Projects\RabbitMQTest1\Consumer\Program.cs:line 33
这是抛出异常时正在执行的代码行:
BasicDeliverEventArgs e = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
到目前为止,我已经看到 rabbitMQ 处于非活动状态时发生的异常。我们的应用程序需要让消费者始终保持连接并监听击键。有谁知道这个问题的原因?有谁知道如何从这个问题中恢复?
提前致谢。
【问题讨论】:
-
RMQ 日志最后一行说什么?您在等待控制台中的输入吗? (默认心跳为 5 秒)
-
是的,一切都在同一台笔记本电脑上运行:RabbitMQ 服务器,一个应用程序是生产者,另一个应用程序是消费者。以下是日志的最后几行:
-
=INFO REPORT==== 13-Dec-2013::10:55:18 === 接受 AMQP 连接 ([FE80::1577:7B91:63E:FD3A ]:49475 -> [FE80::1577:7B91:63E:FD3A]:5672) =警告报告==== 2013 年 12 月 13 日::11:06:09 === 关闭 AMQP 连接 ([FE80::1577:7B91:63E:FD3A]:49475 -> [FE80::1577:7B91:63E:FD3A]:5672):connection_closed_abruptly
-
对不起,我过早地按了 ENTER。击键是使用 windows 挂钩读取的,因此可以在任何地方输入按键。生产者应用程序和消费者应用程序都是 C# 控制台应用程序。显示传出/传入消息。
-
我自己也经历过这种行为,目前正在与 RabbitMQ 工程师确认原因。您的消费应用程序和 RabbitMQ 之间是否有任何类型的负载均衡器。如果是这样,我怀疑您的连接正在被服务器关闭,因为内置的心跳功能被负载均衡器中断了。