2012-04-03 6 views
1

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

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

ответ

2

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

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

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

+0

Большое спасибо. Я думаю, мы сначала установим NServiceBus 3.0, а затем посмотрим, какое лучшее решение. – user993104

0

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

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