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