2014-10-04 5 views
0

Скажем, у меня есть транзакционная очередь.Что происходит, когда транзакция MSMQ не выполняется/прервана?

var msgQ = MessageQueue.Create(@".\$private\Orders", True) 
msgQ.DefaultPropertiesToSend.Recoverable = true; 

Теперь предположим, что я иду, чтобы потреблять сообщение из очереди ...

var msgTx = New MessageQueueTransaction(); 
msgTx.Begin(); 
var msg = msgQ.Receive(msgTx) 

... , а затем машина идет вниз перед фиксации или отмены может иметь место.

Что происходит с сообщением, которое я пытался получить?

ответ

0

Как указано в the documentation for Receive:

Поскольку этот метод вызывается транзакционной очереди, сообщение , что получено будет возвращено в очередь, если транзакция прервана. Сообщение не будет окончательно удалено из очереди до транзакции.

+0

Что делать, если фиксация/прерывание никогда не происходит? Производится ли прерывание, основанное на некоторых критериях? Если да, то каковы эти критерии (или где я могу найти документацию)? – MushinNoShin

+0

Завершение транзакции. Кажется, что нет какой-либо документации, [@ JohnBreakwell's answer] (http://stackoverflow.com/a/5905569/43846) на [этот вопрос] (http://stackoverflow.com/questions/5903538/messagequeuetransaction-timeout) намекает на это, хотя. – stuartd

+0

MSMQ должен обнаружить, что приложение ушло и очистилось, восстановив сообщение в исходное состояние в очереди. Сообщения, не связанные с транзакциями, будут уничтожены. –

Смежные вопросы