У меня похожая ситуация, описанная здесь , но я не могу комментировать там, потому что только что зарегистрировался на этом сайте.
Обходной путь для «приостановки» с 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)
, несмотря на то, что обработчик все еще работает.
После приведения числа рабочих в норму все последующие сообщения выдают аналогичную ошибку в конце обработчика.
Какой-нибудь совет, как правильно бороться с паузой ребуса?
(Мне нужно сделать паузу, потому что мой микросервис требует периодического обновления некоторых ресурсов, и обработчики не могут работать во время этого обновления)