Как написать обработчик для очередей ошибок в NServiceBus Saga? - PullRequest
1 голос
/ 03 апреля 2012

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

Спасибо в Advance Haris

Ответы [ 2 ]

2 голосов
/ 04 апреля 2012

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

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

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

0 голосов
/ 29 апреля 2016

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

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

...