【问题标题】:How to suspend Mass Transit processing messages from the queue如何暂停 Mass Transit 处理队列中的消息
【发布时间】:2013-11-26 12:20:16
【问题描述】:

我有一个 Mass Transit Service Bus,它正在侦听多个队列并处理消息。我想以某种方式暂停新请求的处理并等待当前请求完成,以便我可以运行一些内务任务。

我自己的一些想法:

  • 我已经调查了服务总线 BeforeConsumingMessage 处理程序,虽然这可以让我检查数据库中的“暂停处理”标志,但我不确定我将如何实际暂停处理!
  • 我们正在使用 RabbitMQ - 我可以使用它来将队列置于挂起状态吗?
  • 我在这个主题上发现的太少了,以至于我想知道它是否是一种“反模式”,如果我想运行一些家政工作并相信任何部分完整的 sagas 会被挑选,我应该停止我的 Mass Transit 服务当服务总线重新启动时启动。 (不过,不要选择这个选项)。

所以我的问题是:有没有办法指示服务总线完成对当前 sagas 的处理但不再从队列中获取任何消息?

【问题讨论】:

    标签: masstransit


    【解决方案1】:

    彻底关闭 MT 服务将等待处理中的任何消息完全完成。为什么有时服务需要一段时间才能关闭。关闭服务是处理此问题的最佳方法,您确定 MT 不会拉任何新消息。

    如果您的 sagas 被序列化到后备存储,例如NHibernate,然后状态将被保存,直到服务重新启动,并且 sagas 将恢复到它们在处理完最后一条消息后留下的状态。你的身体应该很好。在任何维护期间,我们都会一直这样做。

    如果您真的必须让服务继续运行,请在 IServiceBus 实例上调用 Dispose。这将做同样的事情,让当前消费者完成然后释放所有资源。完成维护后,您可以根据需要创建一个新的 IServiceBus 实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-13
      • 2012-03-25
      • 2011-04-22
      • 1970-01-01
      • 2023-02-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多