2010-10-09 131 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