2010-10-09 511 views
2

是否有任何方法來攔截NServiceBus中的消息?NServiceBus消息攔截?

public abstract class MessageHandler<T> : IHandleMessages<T> 
    where T : IMessage 
{ 
    public IBus Bus { get; set; } 

    protected abstract void HandleCommand(T command); 

    public void Handle(T command) 
    { 
     // perform some logic on *command* before 
     HandleCommand(command); 
     // perform some logic on *command* after 
    } 
} 

和使用:

public class ConcreteMessageHandler : MessageHandler<ConcreteMessage> 
{ 
    protected override void HandleCommand(ConcreteMessage message) 
    { 
     //handle command 
    } 
} 

但這樣做這樣我失去訂閱的能力

從現在開始,我可以通過手動引入這樣的基地消息處理程序做多個消息(因爲我不能從多個MessageHandler<>類繼承)。

回答

1

NServiceBus現在有一個廣泛的消息處理流水線可擴展性選項看到https://docs.particular.net/nservicebus/pipeline/更多細節

+0

對不起用於代碼示例迷惑你。我在Handle()方法中更新了註釋。正如標題所說,我正在尋找信息攔截。正如你所知,NServiceBus模塊不能用於此,因爲它們包裝傳輸消息,而不是邏輯。 – 2010-10-10 11:37:23

+1

啊,那麼你的選擇是爲你配置的常規處理程序之前和之後運行的相同消息創建額外的消息處理程序。另一種選擇是使用容器的攔截能力。 (http://structuremap.net/structuremap/Interception.htm,如果你在結構圖上)。你能詳細說明你在命令之前和之後要做什麼嗎? – 2010-10-10 11:51:10

+0

謝謝Andreas這兩點。我試圖做的事情之一是將收到的消息發送到另一個隊列,以防萬一它被正確處理。 ForwardReceivedMessages發送所有消息。 似乎爲我的需要,我應該使用容器攔截或我的啞基消息處理程序。 – 2010-10-10 13:08:55