RabbitMQ c#System.IO.EndOfStreamException

use*_*693 6 c# rabbitmq

当消费者阻止从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
Run Code Online (Sandbox Code Playgroud)

以下是抛出异常时正在执行的代码行:

BasicDeliverEventArgs e = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
Run Code Online (Sandbox Code Playgroud)

到目前为止,我已经看到当rabbitMQ处于非活动状态时发生异常.我们的应用程序需要让消费者始终连接并聆听按键操作.有谁知道这个问题的原因?有谁知道如何从这个问题中恢复?

提前致谢.

小智 3

消费者与渠道绑定:

var consumer = new QueueingBasicConsumer(channel);
Run Code Online (Sandbox Code Playgroud)

Queue因此,如果通道已关闭,那么一旦本地被清除,消费者将无法获取任何其他事件。

检查通道是否打开

channel.IsOpen == true
Run Code Online (Sandbox Code Playgroud)

并且队列有可用事件

if( consumer.Queue.Count() > 0 )
Run Code Online (Sandbox Code Playgroud)

致电之前:

BasicDeliverEventArgs e = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
Run Code Online (Sandbox Code Playgroud)

更具体地说,我会在致电之前检查以下内容Dequeue()

if( !channel.IsOpen || !connection.IsOpen )
{
    Your_Connection_Channel_Init_Function();
    consumer = new QueueingBasicConsumer(channel);  // consumer is tied to channel
}

if( consumer.Queue.Any() )
    BasicDeliverEventArgs e = (BasicDeliverEventArgs)consumer.Queue.Dequeue();
Run Code Online (Sandbox Code Playgroud)