Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net NServiceBus消息拦截?_.net_Nservicebus - Fatal编程技术网

.net NServiceBus消息拦截?

.net NServiceBus消息拦截?,.net,nservicebus,.net,Nservicebus,有没有办法在NServiceBus中拦截消息 从现在起,我可以通过如下介绍基本消息处理程序手动执行此操作: public abstract class MessageHandler<T> : IHandleMessages<T> where T : IMessage { public IBus Bus { get; set; } protected abstract void HandleCommand(T command); publ

有没有办法在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
    }
}
公共抽象类MessageHandler:IHandleMessages
其中T:IMessage
{
公共IBus总线{get;set;}
受保护的抽象无效HandleCommand(T命令);
公共无效句柄(T命令)
{
//在之前对*命令*执行一些逻辑
HandleCommand(命令);
//之后对*命令*执行一些逻辑
}
}
以及用法:

public class ConcreteMessageHandler : MessageHandler<ConcreteMessage>
{
    protected override void HandleCommand(ConcreteMessage message)
    {
        //handle command
    }
}
public类ConcreteMessageHandler:MessageHandler
{
受保护的覆盖无效HandleCommand(具体消息)
{
//句柄命令
}
}

但这样做会使我失去订阅多条消息的能力(因为我无法从多个
MessageHandler
类继承)。

NServiceBus现在为消息处理管道提供了广泛的扩展选项,有关更多详细信息,请参阅,您可以查看IMutateOutgoingMessages和IMutateIncomingMessages接口

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


很抱歉让您对代码示例感到困惑。我已经更新了Handle()方法中的注释。正如标题所说,我正在寻找消息拦截。正如您所知,NServiceBus模块不能用于此目的,因为它们包装传输消息,而不是逻辑消息。啊,那么您的选项是为配置为在常规处理程序之前和之后运行的同一消息创建其他MessageHandler。另一种选择是使用容器的拦截能力。(如果您在structuremap上)。你能详细说明一下你在执行命令之前和之后要做什么吗?感谢安德烈亚斯提出这两点。我试图做的一件事是,只有在正确处理消息的情况下,才将接收到的消息发送到另一个队列。ForwardReceivedMessages发送所有消息。似乎出于我的需要,我应该使用容器拦截或哑基消息处理程序。我还想在消息处理程序中拦截一个异常时刻,以通知另一个队列(尽管NServiceBus说不要处理错误,但我认为在很多情况下,我们仍然需要处理错误,我们需要确切地知道抛出了什么消息异常…)到博客的链接已失效。