2014-10-04 40 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 2014-10-06 14:39:33

+0

交易將超時。似乎沒有任何文檔,[@ JohnBreakwell的答案](http://stackoverflow.com/a/5905569/43846)[這個問題](http://stackoverflow.com/questions/5903538/messagequeuetransaction-timeout )雖然暗示。 – stuartd 2014-10-06 14:46:12

+0

MSMQ應該通過將消息恢復到隊列中的原始狀態來檢測應用程序已消失並清理。非事務性消息將被銷燬。 – 2014-10-07 12:33:50

相關問題