Я пытаюсь найти способ обработки сообщений в том порядке, в котором они были отправлены отправителем, поскольку NServiceBus не гарантирует, что сообщения будут обрабатываться в определенном порядке.
Отправитель — это система заказов, которая публикует команды createOrder и reviseOrder. Отправитель позволяет пользователю отправить несколько редакций в один и тот же заказ, чтобы в очереди одновременно могли находиться ревизия 4 и ревизия 3. Каждая ревизия имеет номер ревизии и связанный с ней код причины, который управляет некоторой бизнес-логикой, поэтому мы не можем игнорировать какие-либо ревизии или, по крайней мере, часть причины.
Пара идей, которые у меня были, перечислены ниже:
Сохраните номер редакции вместе с записью назначения. Отправитель отправляет свой номер версии в каждом сообщении о версии. Обработчик сравнивает номера версий отправителя и получателя, если они совпадают, запись обновляется, в противном случае сообщение помещается в конец очереди. При таком подходе, если сообщение ревизии 2 завершается ошибкой и попадает в очередь ошибок, ревизия 3 никогда не будет обработана.
Отправитель отправляет историю всех кодов причин для всех ревизий в каждом сообщении о ревизии. Таким образом, если сообщение версии 2 не удается, сообщение версии 3 будет содержать все коды причин. Эти коды причин будут записаны в место назначения, но любая бизнес-логика, связанная с кодами причин предыдущих версий, может не выполняться.
Как мы разрабатываем для этого сценария?
Есть ли какие-нибудь идеи о том, как обрабатывать сообщения о неудачных версиях?
Некоторые рекомендации действительно ценятся.
Спасибо.