Как написать обработчик для очередей ошибок в NServiceBus Saga?

У меня есть ситуация, когда Maxtries в моем MSMQ равен 5. После 5 раз nservicebus отправляет сообщение в очередь ошибок, которую я определил. Теперь я хочу выполнить некоторые дальнейшие действия, когда это произойдет (мне нужно обновить статус некоторых процессов до ошибки). Можно ли написать обработчик в моем классе Saga для чтения этих очередей ошибок?

Заранее спасибо Харис


person user993104    schedule 03.04.2012    source источник


Ответы (2)


Если вы используете 2.x, вы можете подумать о написании отдельной конечной точки, где очередь ошибок является ее входной очередью. Недостатком этого является то, что сообщения будут выходить из очереди. Предполагая, что вы все еще хотите их хранить, вам придется отправить их в базу данных или хранилище другого типа.

Вы также можете написать Saga, которая опрашивает очередь ошибок, чтобы проверить наличие сообщений и обновить соответствующий статус. После каждой проверки очереди вам нужно будет запрашивать еще один тайм-аут.

В версии 3.0 у вас больше контроля над исключениями и вы можете реализовать свой собственный способ обработки ошибок. Если вы реализуете интерфейс IManageMessageFailures, вы можете выполнять свою работу там.

person Adam Fyles    schedule 04.04.2012
comment
Большое спасибо. Я думаю, мы сначала установим NServiceBus 3.0, а потом посмотрим, какое решение лучше. - person user993104; 11.05.2012

В качестве альтернативы решениям, предоставленным Адамом, вы можете подписаться на события, вызываемые ServiceControl, которые вызываются при отправке сообщения в очередь ошибок. См. официальную документацию по этому вопросу здесь: http://docs.particular.net/servicecontrol/contracts

Другим подходом может быть API уведомлений, как описано здесь: http://docs.particular.net/nservicebus/errors/subscribing-to-error-notifications. Это позволяет вам подписываться на определенные события (не сообщения о событиях), такие как «MessageSentToErrorQueue», непосредственно на конечной точке, поэтому вам не нужно использовать очередь ошибок.

person Sabacc    schedule 29.04.2016