Какова правильная конфигурация, чтобы сообщения отправлялись по порядку в MSMQ? - PullRequest
1 голос
/ 23 марта 2011

Вот сценарий:

2 Машины: "Машина A" и "Машина B".

Давайте посмотрим, что их соответствующие IP-адреса: 192.168.0.100 (для A) и 192.168.0.200 (для B). На обеих машинах установлен MSMQ на Windows Server 2008.

Машина A

Настроена следующая очередь: private$\aaa, транзакция .

Имеет одного потребителя для этой очереди, который оборачивает каждое действие Read в транзакции MSMQ и читает только из «текущего» сообщения (т. Е. Операции курсора не используются).

Машина B

Имеет одно приложение, которое отправляет сообщения на FormatName:direct=os:192.168.0.100\private$\aaa. Каждое сообщение Send заключено в транзакцию MSMQ с (код на C #):
TimeToReachQueue = Message.InfiniteTimeout
и
TimeToBeReceived = Message.InfiniteTimeout

И ... вопрос

При этом сценарии и конфигурации private$\aaa отправляются сообщения от B к A:

  1. Доставлено один раз? Я имею в виду, должен ли я в приложении-потребителе на машине A убедиться, что «текущее» сообщение действительно «новое» (то есть не было обработано раньше)? Или сам MSMQ позаботится об этом? Я знаю, это звучит немного глупо, так как это очередь, верно ?! Но я не смог найти конкретную ссылку, утверждающую, что сообщения в порядке. Я видел такое заявление, но не с официального ресурса Microsoft.
  2. В порядке? Я имею в виду, возможно ли, что сообщение M1 не может быть отправлено из B в A из-за проблем в сети, а затем, возможно, сеть вернулась в нормальное состояние, и следующее сообщение, M2, успешно отправлено на машину A?

Большое спасибо!

1 Ответ

3 голосов
/ 23 марта 2011
  1. Доставлено один раз гарантировано, но имейте в виду, что у вас есть транзакционная очередь, поэтому, если обработка сообщения в первый раз не удалась, она будет доставлена ​​снова, пока не будет успешно выполнена или перемещена в очередь отравленных сообщений. , Поэтому «Доставлено один раз» гарантируется только в этом контексте, и если другие ресурсы, которыми вы манипулируете, также являются транзакционными и участвуют в распределенной транзакции, тогда вы должны быть в безопасности.

  2. Сообщения «отправляются вместе, в том порядке, в котором они были отправлены, или не отправляются вовсе». См. MSMQ Советы

...