C# 如何使用EasyNetQ从RabbitMQ断开连接,然后重新连接?

C# 如何使用EasyNetQ从RabbitMQ断开连接,然后重新连接?,c#,rabbitmq,message-queue,easynetq,C#,Rabbitmq,Message Queue,Easynetq,我需要断开与RabbitMQ的连接,并使用EasyNetQ重新连接。我通过按照文档中的描述处理IBU来实现这一点 “要关闭连接,只需处理总线……这将关闭连接、通道、使用者和EasyNetQ使用的所有其他资源。” 但是,当我调用创建新总线时,它仍然显示为断开连接并已释放 bus = RabbitHutch.CreateBus(connString); bus.Dispose(); resolver.EasyNetQKernel.Release(bus); bus = RabbitHutch.Cr

我需要断开与RabbitMQ的连接,并使用EasyNetQ重新连接。我通过按照文档中的描述处理IBU来实现这一点

“要关闭连接,只需处理总线……这将关闭连接、通道、使用者和EasyNetQ使用的所有其他资源。”

但是,当我调用创建新总线时,它仍然显示为断开连接并已释放

bus = RabbitHutch.CreateBus(connString);
bus.Dispose();
resolver.EasyNetQKernel.Release(bus);
bus = RabbitHutch.CreateBus(connString);
bus.Receive<Command>("CommandQueue"), Process);
bus=RabbitHutch.CreateBus(connString);
bus.Dispose();
解析程序.EasyNetQKernel.Release(总线);
bus=RabbitHutch.CreateBus(connString);
总线接收(“命令队列”),进程);
在这一点上,当我尝试重置我的消费者时,我得到一个EasyNetQException,消息为“Bus has disposed”


为什么在处理完总线后不能重新创建它?

我还没有使用Ninject,但是您能尝试处理并重新创建整个Ninject容器而不是总线实例吗?我认为您的容器可能保留了已处理的旧引用。

我没有使用Ninject,但是您是否可以尝试处理并重新创建整个Ninject容器而不是总线实例?我认为您的容器可能保留了已处理的旧引用。

我假设这与IBus是EasyNetQ IoC容器中的一个单件有关?您所说的“重置您的消费者”是什么意思?是否创建新订阅?你能展示你的代码吗?你在使用什么,你也在处理你的容器吗?是的,去掉旧的,创建新的,比如说,可能是一个新的预取计数。我正在使用ninject并尝试调用resolver.EasyNetQKernel.Release(bus);在总线之后。Dispose();认为这可能允许我重新创建IBU,但它仍然处于相同的状态,不允许我使用bus.Receive()创建任何新的“订阅”;顺便说一下,“解析器”只是我用来设置绑定之类的对象。它公开了用于EasyNetQ的Ninject内核。Wiebe Tijsma,你是对的,我必须处理该内核。我假设这与IBus是EasyNetQ IoC容器中的一个单体有关?你说的“重置你的消费者”是什么意思?是否创建新订阅?你能展示你的代码吗?你在使用什么,你也在处理你的容器吗?是的,去掉旧的,创建新的,比如说,可能是一个新的预取计数。我正在使用ninject并尝试调用resolver.EasyNetQKernel.Release(bus);在总线之后。Dispose();认为这可能允许我重新创建IBU,但它仍然处于相同的状态,不允许我使用bus.Receive()创建任何新的“订阅”;顺便说一下,“解析器”只是我用来设置绑定之类的对象。它公开了用于EasyNetQ的Ninject内核。Wiebe Tijsma,你是对的,我不得不处理内核。
bus = RabbitHutch.CreateBus(connString);
bus.Dispose();
resolver.EasyNetQKernel.Release(bus);
bus = RabbitHutch.CreateBus(connString);
bus.Receive<Command>("CommandQueue"), Process);