Общественный транспорт отменяет работу потребителя при выключении или перезапуске модуля ⇐ C#
Общественный транспорт отменяет работу потребителя при выключении или перезапуске модуля
У меня возникла следующая проблема с общественным транспортом в приложении .Net.
У меня есть класс, который реализует интерфейс IConsumer и получает сообщения из очереди RabbitMQ. Приложение работает как модуль в кластере Kubernetes и может масштабироваться по горизонтали, поэтому при необходимости мы можем запускать несколько экземпляров приложения одновременно.
Я также внедряю сервис с помощью:
builder.Services.AddMassTransit() где я настраиваю Потребителя, Хост RabbitMQ и конечную точку получения.
Когда модуль выключается/перезапускается по какой-либо причине и поскольку существует фактическая задержка с момента получения сигнала SIGTERM модуля до момента его полного выключения, я хочу иметь возможность:
[*]уведомить метод, который я вызываю от потребителя, об отмене задачи; [*]не дать всем остальным потребителям, которые только что начали обработку сообщения, вызывать этот метод;
Вот что у меня есть сейчас, что не работает главным образом потому, что токен отмены из контекста не меняет состояния:
public async Task Consume (контекст ConsumeContext) { пытаться { если (context.CancellationToken.IsCancellationRequested) { выбросить новое OperationCanceledException(); } // метод вызова, который также получает токен отмены } поймать (Исключение ex) когда (например, OperationCanceledException || ex — TaskCanceledException) { // записываем это бросать; } } Пожалуйста, дайте мне знать, если у вас есть идеи, как мне добиться такого поведения. Спасибо!
У меня возникла следующая проблема с общественным транспортом в приложении .Net.
У меня есть класс, который реализует интерфейс IConsumer и получает сообщения из очереди RabbitMQ. Приложение работает как модуль в кластере Kubernetes и может масштабироваться по горизонтали, поэтому при необходимости мы можем запускать несколько экземпляров приложения одновременно.
Я также внедряю сервис с помощью:
builder.Services.AddMassTransit() где я настраиваю Потребителя, Хост RabbitMQ и конечную точку получения.
Когда модуль выключается/перезапускается по какой-либо причине и поскольку существует фактическая задержка с момента получения сигнала SIGTERM модуля до момента его полного выключения, я хочу иметь возможность:
[*]уведомить метод, который я вызываю от потребителя, об отмене задачи; [*]не дать всем остальным потребителям, которые только что начали обработку сообщения, вызывать этот метод;
Вот что у меня есть сейчас, что не работает главным образом потому, что токен отмены из контекста не меняет состояния:
public async Task Consume (контекст ConsumeContext) { пытаться { если (context.CancellationToken.IsCancellationRequested) { выбросить новое OperationCanceledException(); } // метод вызова, который также получает токен отмены } поймать (Исключение ex) когда (например, OperationCanceledException || ex — TaskCanceledException) { // записываем это бросать; } } Пожалуйста, дайте мне знать, если у вас есть идеи, как мне добиться такого поведения. Спасибо!
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
ОБЩЕСТВЕННЫЙ РЕАКТ-UI ONUPLOADFILES не запускается при выборе кнопки «Выбрать файл»
Anonymous » » в форуме Javascript - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-