在消费中间件上修改消息的 header
Modify message's header on consuming middleware
有没有什么办法可以在消息消费的时候修改中间件中消息的header?
正如我所看到的,ConsumeContext 上的 Headers 接口没有提供任何设置 header 的方法,还有其他方法可以实现吗?
谢谢!
您不能在使用中间件的过程中添加 headers,但是,您可以将 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!");
}
有没有什么办法可以在消息消费的时候修改中间件中消息的header? 正如我所看到的,ConsumeContext 上的 Headers 接口没有提供任何设置 header 的方法,还有其他方法可以实现吗? 谢谢!
您不能在使用中间件的过程中添加 headers,但是,您可以将 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!");
}