【问题标题】:How to disconnect, then reconnect from RabbitMQ using EasyNetQ?如何断开连接,然后使用 EasyNetQ 从 RabbitMQ 重新连接?
【发布时间】: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


【解决方案1】:

我没有使用过 Ninject,但您可以尝试处置和重新创建整个 Ninject 容器而不是总线实例吗?我认为您的容器可能会保留已释放的旧引用。

【讨论】:

    猜你喜欢
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 2019-02-22
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多