NServiceBus Отложенная обработка сообщений - PullRequest
1 голос
/ 21 августа 2009

У меня есть приложение NServiceBus, для которого данное сообщение не может быть обработано из-за отсутствия какого-либо внешнего события. Поскольку это другое событие не является событием NSB, я не могу правильно реализовать саги.

Однако вместо того, чтобы просто ставить сообщение в очередь (что вызовет цикл, пока не произойдет это внешнее событие), я обертываю сообщение в другое сообщение (DelayMessage) и вместо этого ставлю его в очередь. DelayMessage забирается другой службой и помещается в базу данных до истечения интервала повторных попыток. В этот момент служба задержки повторно помещает сообщение в исходную очередь, поэтому можно предпринять еще одну попытку.

Однако, это может происходить несколько раз, если это внешнее событие все еще не произошло, и в случае, когда это даже никогда не происходит, я хочу ограничить количество циклов, совершаемых сообщением. Это означает, что DelayMessage имеет свойство MaxRetries, но оно теряется, когда служба задержки ставит в очередь исходное сообщение для повторной попытки.

Какие еще опции мне не хватает? Я рад признать, что есть совершенно иное решение этой проблемы.

1 Ответ

4 голосов
/ 21 августа 2009

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

...