【问题标题】:Rebus Pub Sub: Retrieve headers on subscriberRebus Pub Sub:检索订阅者的标头
【发布时间】:2019-05-29 21:09:02
【问题描述】:

标头使用 Azure 服务总线发布,如下所示:

 string content = "body";
 await _busPublisher.Activator.Bus.Publish(content, headers);

如何同时检索订阅者的标题和内容?

class Handler :  IHandleMessages<string>
    {

    public Handler(IMessageContext messageContext, ILog log)
    {
        _messageContext = messageContext;
        _log = log;
    }

        public async Task Handle(string message)
        {
            Console.WriteLine("Handle(string message): {0}", message);

        }
    }

更新

以下是一种解决方案。这是最好的解决方案吗?

        public Handler(IMessageContext messageContext, ILog log)
    {
        _messageContext = messageContext;
        _log = log;
    }
            public async Task Handle(string message)
            {
                Console.WriteLine("Handle(string message): {0} ", message);
                Console.WriteLine("headers: {0} ", string.Join(' ', _messageContext.Headers));

            }

当像下面这样实例化一个 Handler 时,是否可以使用依赖注入来代替?

        var Activator = new BuiltinHandlerActivator();

        Activator.Register((mc) =>
            {
                return new Handler(mc, log);  //no new?

            }

【问题讨论】:

    标签: rebus rebus-azureservicebus


    【解决方案1】:

    接受IMessageContext 注入你的处理程序的构造函数是要走的路:

    public class Handler : IHandleMessages<string>
    {
        readonly IMessageContext messageContext;
    
        public Handler(IMessageContext messageContext, ILog log)
        {
            this.messageContext = messageContext;
        }
    
        public async Task Handle(string message)
        {
            var headers = messageContext.Headers;
    
            // do stuff
        }
    }
    

    如果你使用BuiltinHandlerActivator,你可以像这样注入它:

    activator.Register(context => new Handler(context));
    

    或者如果您还需要处理程序中的IBus

    activator.Register((bus, context) => new Handler(bus, context));
    

    【讨论】:

    • 我的问题是有没有办法避免使用这个:new Handler?如 OP 所述。
    • 是的——你可以通过选择一个真正的 IoC 容器来做到这一点。您可以在 wiki 页面上阅读有关 IoC 容器的更多信息:Container adapters
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多