У меня есть приложение NServiceBus, для которого данное сообщение не может быть обработано из-за какого-либо внешнего события, которое не произошло. Поскольку это другое событие не является событием NSB, я не могу правильно реализовать саги.Обработка сообщений с задержкой NServiceBus
Однако, вместо того, чтобы просто перематывать сообщение (что вызовет цикл до тех пор, пока это внешнее событие не произойдет), я обертываю сообщение в другое сообщение (DelayMessage) и выполняю очередь в очереди. DelayMessage подхватывается другой службой и помещается в базу данных до истечения интервала повтора. В этот момент служба задержки перезагружает сообщение в исходной очереди, чтобы можно было сделать еще одну попытку.
Однако это может случиться более одного раза, если это внешнее событие все еще не состоялось, а в случае, когда это даже никогда не происходит, я хочу ограничить количество круглых поездок, которые принимает сообщение. Это означает, что свойство DelayMessage имеет свойство MaxRetries, но оно теряется, когда служба задержки ставит в очередь исходное сообщение для повтора.
Какие еще варианты мне не хватает? Я рад принять, что существует совершенно другое решение этой проблемы.
Ничего себе сам человек - спасибо! Я не могу использовать сагу, о которой я не думаю. Существует только одно сообщение, и перед его обработкой ему нужны некоторые данные в базе данных. На самом деле нет двух сообщений, которые я могу собрать в саге, данные создаются старой хранимой процедурой, я использую NSB для добавления дополнительных данных, которые ссылаются на нее. –
Затем используйте тайм-аут в саге, чтобы проверить, имеются ли данные в базе данных - он предоставит вам простой механизм опроса; нет данных, запросите другой тайм-аут. –