【问题标题】:Modify message's header on consuming middleware修改消费中间件的消息头
【发布时间】:2016-11-21 14:32:18
【问题描述】:

有没有办法在消息消费期间修改中间件中的消息头? 正如我所见,ConsumeContext 上的 Headers 接口没有提供任何设置标题的方法,还有其他方法可以实现吗? 谢谢!

【问题讨论】:

    标签: c# rabbitmq masstransit


    【解决方案1】:

    您不能在使用中间件的过程中添加标头,但是,您可以将 payloads 添加到可以在管道中的其他地方使用的上下文中。

    例如,如果您有一个 AuthorizationContext 上下文,您可以将其添加到中间件组件内的有效负载中:

    public Task Send(ConsumeContext context, IPipe<ConsumeContext> next)
    {
        context.GetOrAddPayload(() => CreateAuthorizationContext());
    
        return next.Send(context);
    }
    

    然后,上下文的另一个组件或用户可以访问它:

    public Task Consume(ConsumeContext<MyMessage> context)
    {
        var authorizationContext = context.GetPayload<AuthorizationContext>();
    
        if(authorizationContext.IsAdmin)
            return UpdateSomething(context);
    
        throw new NotAuthorizationException("Booo!");
    }
    

    【讨论】: