c# - 如何正确暂停 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 的暂停?
(我需要暂停,因为我的微服务需要定期更新一些资源并且处理程序在这些更新期间无法运行)
解决方案
推荐阅读
- php - WooCommerce - 从面包屑中删除产品标题,但保留所有类别超链接
- java - 应该如何处理线程锁以保持其他线程等待直到下载文件然后允许所有线程一次性读取文件
- javascript - 清除命令不重复批量删除
- python - python panda链式赋值的替代方法是什么
- javascript - React 应用程序在部署到 heroku 时不显示任何内容
- python - 记录在 Python 中链接两个大型 CSV?
- excel - 在多个宏中使用变量
- jquery - 从同一列返回数据表中的多个值
- c# - 获取:asp.net mvc中不存在所需的防伪表单字段“__RequestVerificationToken”
- html - 无法覆盖 Bootstrap Jumbotron