首页 > 解决方案 > 如何正确暂停 Rebus 接收消息?

问题描述

我在这里描述了类似的情况,但不能在那里发表评论,因为刚刚在这个网站上注册。SetNumberOfWorkers(0)在大多数情况下,“暂停”的解决方法有效。但是,如果SetNumberOfWorkers(0)在冗长的消息处理程序期间调用,我会在消息处理程序结束时收到以下错误:

An error occurred when attempting to complete the transaction context Rebus.Exceptions.RebusApplicationException: Could not complete message with ID <...> and lock token <...> ---> Microsoft.Azure.ServiceBus.MessageLockLostException: The lock supplied is invalid. Either the lock expired, or the message has already been removed from the queue.

请注意,尽管处理程序仍在运行,但"Worker Rebus 1 worker 1 stopped"在调用后几乎立即收到所有工作人员的消息。SetNumberOfWorkers(0)

在使工人数量恢复正常后,所有进一步的消息都会在处理程序结束时引发类似的错误。

任何建议如何正确处理 rebus 的暂停?

(我需要暂停,因为我的微服务需要定期更新一些资源并且处理程序在这些更新期间无法运行)

标签: c#rebusbus

解决方案


推荐阅读