【发布时间】:2017-03-14 17:22:59
【问题描述】:
我需要断开与 RabbitMQ 的连接并使用 EasyNetQ 重新连接。我通过按照文档中的描述处理 IBus 来做到这一点。
https://github.com/EasyNetQ/EasyNetQ/wiki/connecting-to-rabbitmq
“要关闭连接,只需释放总线......这将关闭连接、通道、消费者和 EasyNetQ 使用的所有其他资源。”
但是,当我调用创建新总线时,它仍然显示为已断开连接并已释放。
bus = RabbitHutch.CreateBus(connString);
bus.Dispose();
resolver.EasyNetQKernel.Release(bus);
bus = RabbitHutch.CreateBus(connString);
bus.Receive<Command>("CommandQueue"), Process);
此时,当我尝试重置我的消费者时,我收到了带有消息“总线已被处置”的 EasyNetQException。
为什么我不能在处理掉总线后重新创建它?
【问题讨论】:
-
我假设这与 IBus 是 EasyNetQ 的 IoC 容器中的单例有关?
-
“重置您的消费者”是什么意思?您是否创建新订阅?你能显示你的代码吗?你用的是什么IOC,你也在处理你的容器吗?
-
是的,去掉旧的并创建新的,比如说,也许是一个新的预取计数。我正在使用 ninject 并尝试调用 resolver.EasyNetQKernel.Release(bus);在 bus.Dispose() 之后;认为这可能允许我重新创建 IBus,但它仍然处于相同状态,并且不允许我使用 bus.Receive(); 创建任何新的“订阅”;
-
顺便说一句,“解析器”只是我用来设置绑定等的对象。它公开了用于 EasyNetQ 的 Ninject 内核。
-
Wiebe Tijsma,你是对的,我不得不处理内核。
标签: c# rabbitmq message-queue easynetq