NServiceBus消息拦截?

时间:2010-10-09 17:15:23

标签: .net 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<>类继承)。

2 个答案:

答案 0 :(得分:1)

NServiceBus现在为消息处理管道提供了广泛的可扩展性选项,请参阅https://docs.particular.net/nservicebus/pipeline/了解更多详情

答案 1 :(得分:1)

如果您使用的是NServiceBus V3,则可以查看IMutateOutgoingMessages和IMutateIncomingMessages接口。

http://support.nservicebus.com/customer/portal/articles/894155-nservicebus-message-mutators-sample

或者,如果您希望消息按特定顺序通过处理程序,请查看以下链接:

http://support.nservicebus.com/customer/portal/articles/862397-how-do-i-specify-the-order-in-which-handlers-are-invoked-