我有一个公共交通服务总线,它正在侦听多个队列并处理这些消息。我想以某种方式暂停处理新请求并等待当前请求完成,以便我可以运行一些内务处理任务。
我自己的一些想法:
BeforeConsumingMessage
处理程序,虽然这样我可以检查数据库中的“暂停处理”标志,但我不确定如何实际暂停处理!所以我的问题是:有没有办法指示服务总线完成当前传闻的处理,但是不再从队列中接收任何消息?
答案 0 :(得分:2)
干净地关闭MT服务将等待正在处理的任何消息完全结束。为什么有时需要一段时间才能关闭服务。关闭服务是处理此问题的最佳方式,您确定MT不会提取任何新消息。
如果您的传奇被序列化到后备商店,例如NHibernate,然后状态将被保存,直到服务重新启动,并且传奇将在处理完最后一条消息后留下的状态中恢复。你应该保持良好状态。我们会在任何维护期间一直这样做。
如果您真的必须让服务保持运行,请在Dispose
实例上调用IServiceBus
。这将做同样的事情,让当前的消费者完成然后释放你的所有资源。完成维护后,您可以根据需要创建新的IServiceBus实例。