当前位置:  开发笔记 > 后端 > 正文

如何将标题附加到所有已发布的消息?

如何解决《如何将标题附加到所有已发布的消息?》经验,为你挑选了1个好方法。

我有一个特殊的标题,我想附加到我发布的所有消息.我可以通过在Publish调用中指定它来逐个添加此标头:

_bus.Publish(myMessage, context => context.SetHeader("my key", "my value"));

这样可以正常工作,但是SetHeader为每次发布维护此调用都变成了一件苦差事.在总线配置期间或其他任何地方,有没有办法指定将附加到所有消息的标头?也就是说,有没有办法做以下事情?

ServiceBusFactory.New(sbc =>
{        
    sbc.UseRabbitMq();
    sbc.ReceiveFrom(hdoQueue);

    // This is what I'd like to be able to do:
    sbc.BeforePublish(context => context.SetHeader("my key", "my value"));
});

我相信有一个解决方案涉及实现,IOutboundMessageInterceptor但我找不到一种方法来附加我的拦截器.有ServiceBusConfigurator.AddInboundInterceptor方法但不是ServiceBusConfigurator.AddOutboundInterceptor方法.



1> ean5533..:

我的直觉是正确的,我能够通过实施我想做的事情IOutboundMessageInterceptor:

public class AttachHeadersOutboundInterceptor : IOutboundMessageInterceptor
{
    public void PreDispatch(ISendContext context)
    {
        context.SetHeader("my key", "my value");
    }

    public void PostDispatch(ISendContext context)
    {
    }
}

奇怪的是不存在ServiceBusConfigurator.AddOutboundInterceptor的方法,所以我刚创建一个(通过复制所述代码用于AddInboundInterceptor从GitHub):

public static class MassTransitExtensions
{
    public static void AddOutboundInterceptor(this ServiceBusConfigurator configurator,
        IOutboundMessageInterceptor interceptor)
    {
        var builderConfigurator = new PostCreateBusBuilderConfigurator(bus =>
        {
            var interceptorConfigurator = new OutboundMessageInterceptorConfigurator(bus.OutboundPipeline);

            interceptorConfigurator.Create(interceptor);
        });

        configurator.AddBusConfigurator(builderConfigurator);
    }
}

然后我在总线配置期间附加它:

ServiceBusFactory.New(sbc =>
{        
    sbc.UseRabbitMq();
    sbc.ReceiveFrom(hdoQueue);

    sbc.AddOutboundInterceptor(new AttachHeadersOutboundInterceptor());
});

问题解决了.


如果有人读到这个:在MT3中有[中间件](http://masstransit-project.com/MassTransit/advanced/middleware/custom.html).
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有