Главное, что нужно понять о транзакционном MSMQ, - это то, что на самом деле в транзакции передачи сообщения в удаленную очередь участвуют 3 отдельные транзакции.
- Отправитель записывает сообщение в локальную временную очередь.
- Администратор очередей на машине отправителя передает сообщение по проводной связи администратору очередей на машине получателя.
- Служба получателя обрабатывает сообщение очереди, а затем удаляет сообщение из очереди.
Итак, в ответ на ваши вопросы:
При отправке сообщения создается локальная копия на компьютере B, перед
он доставляется на машину A?
Да
Если это так, является ли это поведение по умолчанию, или это происходит только когда
Свойство IsRecoverable отправлено?
По умолчанию. Это то, что известно как store и forward .
Влияет ли на это тот факт, что очередь является транзакционной?
поведение?
Нет, за исключением случаев, когда происходит сбой.
Поскольку я использую транзакционную очередь, где данные, как только
транзакция совершается?
Это зависит от того, какую транзакцию вы имеете в виду (см. Выше)
Он сидит локально, ожидая, пока служба msmq доставит
сообщение в удаленную очередь?
Только если удаленная очередь недоступна.
Или сообщение находится в очереди на удаленном компьютере?
Если службе получателя не удалось успешно обработать сообщение (в обработчике есть исключение), сообщение останется в удаленной очереди.