Сообщение шины NService не поступает в последовательности (т. Е. Как оно отправлено) - PullRequest
0 голосов
/ 26 мая 2010

Мы используем шину NService для нашей среды обмена сообщениями. Иногда сообщение не приходит в соответствии с последовательностью отправки. Иногда последнее сообщение приходит первым, а затем - первым сообщением.

Пожалуйста, помогите мне Спасибо

Ответы [ 2 ]

3 голосов
/ 26 мая 2010

Характер NServiceBus не гарантирует, что сообщения будут получены в том порядке, в котором они были отправлены. Каждое сообщение должно обрабатываться независимо.

Если действие может быть предпринято только после прибытия двух связанных сообщений, вам необходимо использовать Saga

Изменить в ответ на первый комментарий:

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

Если это так, у вас есть несколько вариантов:

  1. Хранить полезную нагрузку вне диапазона, в базе данных или файловой системе, и помещать достаточно данных только в одно сообщение (идентификатор или путь файловой системы) для загрузки данных из обработчика сообщений.

  2. Сделать сообщение MessagePart, содержащим BundleID, PartNumber, TotalParts и PayloadChunk. Затем создайте сагу для MessagePart, в которой будут храниться все части, а когда все части будут получены, соберите куски вместе и сделайте то, что вам нужно. Конечно, если вам нужно затем отправить полученный большой объект обратно на шину, это очень быстро разозлится, так что опция out-of-band будет выглядеть намного привлекательнее.

В любом случае, существует масса причин, по которым любое сообщение MSMQ, а не только сообщения NServiceBus, может поступать не по порядку, поэтому вам придется иметь с ним дело.

1 голос
/ 27 мая 2010

Будет ли Bus.Sending коллекцию Imessages работать? NServiceBus позволяет пакетировать сообщения

...