配置要在消费者中交付的端点时添加元数据

Add metadata when configuring an endpoint to be delivered in the Consumer

因此,当我配置端点并设置 ep.Consumer<MyConsumer>(context) - 我是否能够向每次调用时出现在 ConsumeContext 中的消费者添加一些内容?

例如这样的事情:

        MyMetaData metadata = new MyMetaData() { foo: "Bar" }
        ep.Consumer<MyConsumer>(context, c => c.somehowincludemetadata(metadata));

然后在消费者中:

        public Task Consume(ConsumeContext<Message> context)
        {
            var metadata = (MyMetaData)context.heresyourmetadata();
        }

显然伪代码 - 但我所追求的本质上是一种方法,通过它我可以将上下文(如客户名称、计算机名称)添加到上下文中以在处理过程中检索。

完全在消费者一方,发布者不会知道需要包含的数据。

非常感谢。

元数据通常必须来自某个地方,它可以作为依赖项注入到消费者中。如果它基于消息中的数据或 headers,另一种选择是使用中间件——例如可以将有效负载添加到 ConsumeContextscoped filter。此选项可以在容器范围内的共享上下文 object 上设置属性,或者如前所述,添加有效负载。

另一种选择是以某种方式添加在消费者之前调用的异步方法,如下所示。

ep.ConfigureConsumer<MyConsumer>(context, 
    x => x.UseExecute(context => context.Consumer.Property = Value)));

或者,您也可以添加负载:

ep.ConfigureConsumer<MyConsumer>(context, 
    x => x.UseExecute(context => 
        context.GetOrAddPayload(() => new MyPayload())));