如何暂停Mass Transit处理队列中的消息

时间:2013-11-26 12:20:16

标签: masstransit

我有一个公共交通服务总线,它正在侦听多个队列并处理这些消息。我想以某种方式暂停处理新请求并等待当前请求完成,以便我可以运行一些内务处理任务。

我自己的一些想法:

  • 我调查了服务总线BeforeConsumingMessage处理程序,虽然这样我可以检查数据库中的“暂停处理”标志,但我不确定如何实际暂停处理!
  • 我们正在使用RabbitMQ - 我可以使用它来将队列置于暂停状态吗?
  • 我在这个问题上发现的很少,我想知道这是否是一个“反模式”我应该停止我的公共交通服务,如果我想做一些家务工作并相信任何部分完整的传奇被选中当服务总线重新启动时。 (而不是去寻找这个选项)。

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

1 个答案:

答案 0 :(得分:2)

干净地关闭MT服务将等待正在处理的任何消息完全结束。为什么有时需要一段时间才能关闭服务。关闭服务是处理此问题的最佳方式,您确定MT不会提取任何新消息。

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

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