我有一辆公共交通巴士,它可以监听多个队列并处理信息。我想以某种方式暂停对新请求的处理,并等待当前请求的完成,以便我能够运行一些内务管理任务。
我自己的一些想法:
BeforeConsumingMessage处理程序,虽然这将允许我检查数据库中的“暂停处理”标志,但我不确定如何才能真正暂停处理!因此,我的问题是:是否有一种方法可以指示服务总线完成当前sagas的处理,但不接收队列中的任何消息?
发布于 2013-11-26 13:57:17
干净地关闭MT服务将等待进程中的任何消息完全完成。为什么有时服务需要一段时间才能关闭。关闭服务是处理这一问题的最佳方法,您可以肯定MT并没有拉动任何新消息。
如果您的sagas被序列化到备份存储(例如NHibernate ),那么状态将被保存,直到服务重新启动,并且sagas将恢复到在处理最后一条消息后留下的状态。你应该保持良好的状态。在任何维修期间,我们都会这样做。
如果您确实必须让服务运行,那么在Dispose实例上调用IServiceBus。这将做同样的事情,让当前的消费者完成,然后释放您的所有资源。一旦完成了维护,就可以根据需要创建一个新的IServiceBus实例。
https://stackoverflow.com/questions/20216942
复制相似问题