我有一个公共(public)交通服务总线,它正在监听多个队列并处理消息。我想以某种方式暂停新请求的处理并等待当前请求完成,以便我可以运行一些内务处理任务。
我个人的一些想法:
BeforeConsumingMessage
处理程序,虽然这将允许我检查数据库中的“暂停处理”标志,但我不确定我将如何实际暂停处理! 所以我的问题是:有没有办法指示服务总线完成对当前 sagas 的处理但不再从队列中获取任何消息?
最佳答案
彻底关闭 MT 服务将等待处理中的任何消息完全完成。为什么有时服务需要一段时间才能关闭。关闭服务是处理此问题的最佳方法,您确定 MT 不会拉任何新消息。
如果您的 sagas 被序列化到后备存储,例如NHibernate,然后状态将被保存,直到服务重新启动,并且 saga 将恢复到它们在处理最后一条消息后留下的状态。你的 body 应该很好。在任何维护期间,我们都会一直这样做。
如果您真的必须让服务继续运行,请调用 Dispose
在 IServiceBus
实例。这将做同样的事情,让当前消费者完成然后释放所有资源。完成维护后,您可以根据需要创建一个新的 IServiceBus 实例。
关于masstransit - 如何暂停 Mass Transit 处理队列中的消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20216942/