2013-11-20 54 views
0

我讀過每個消息處理程序都包含在「環境事務」中,並且在可能的情況下,該數據庫訪問會自動列入該事務中。 NServiceBus是否對該事務做了其他事情?具體來說,我想知道是否可以以某種方式取消處理程序在發生異常時發送/發佈的任何消息。在處理程序中發送/發佈的消息發生異常時會發生什麼情況?

在下面的代碼中,總線在調用Send方法後立即發送ArchiveMessage,還是排隊並只在處理程序成功執行時發送它?

public class BadHandler 
{ 
    public IBus Bus { get; set; } 

    public void Handle(MyMessage msg) 
    { 
     Bus.Send(new ArchiveMessage(msg.MessageId)); //does this message send? 
     throw new Exception("Something terrible happened, maybe my database connection failed!"); 
    } 
} 

回答

2

我這種情況下,消息不會被髮送。 MyMessage將重試配置的次數,並將它們移動到指定的錯誤隊列中。如果你願意,你可以對這個過程有更好的控制,你需要創建一個自定義的FaultManager。

+0

謝謝!我一直在做複雜的東西,以避免調用發送/發佈,直到我的數據庫的東西提交後,很高興知道NServiceBus足夠智能/複雜,足以做出正確的事情發生異常。再次感謝你的信息! – smalltowndev

相關問題