我正在使用 MassTransit 3.0.0.0,我很难理解如何在请求-响应场景中拦截消息,并将一些信息添加到我可以在接收器端读取的标头字段。
我正在看中间件 http://masstransit-project.com/MassTransit/advanced/middleware/custom.html,按照 MassTransit 文档中的建议 - 请参阅观察员 https://masstransit-project.com/MassTransit/usage/observers.html警告 - 但您在“发送”上获得的上下文只是一个管道上下文,无法访问“标头”字段,因此我无法更改它。我使用了中提供的示例中间件 http://masstransit-project.com/MassTransit/advanced/middleware/custom.html page.
然后我查看了 IPublishInterceptor
public class X<T> : IPublishInterceptor<T> where T : class, PipeContext
{
public Task PostPublish(PublishContext<T> context)
{
return new Task(() => { });
}
public Task PostSend(PublishContext<T> context, SendContext<T> sendContext)
{
return new Task(() => { });
}
public Task PrePublish(PublishContext<T> context)
{
context.Headers.Set("ID", Guid.NewGuid().ToString());
return new Task(() => { });
}
public Task PreSend(PublishContext<T> context, SendContext<T> sendContext)
{
context.Headers.Set("ID", Guid.NewGuid().ToString());
return new Task(() => { });
}
}
这是非常清晰和简洁的。但是,我不知道它在哪里使用以及如何将其链接到基础设施的其余部分。就目前而言,这只是一个界面,并没有真正链接到任何东西。
如果您需要在发送消息时添加标头,可以将中间件组件添加到发送或发布管道,如下所示。请注意,发送过滤器将应用于所有消息,而发布过滤器将仅应用于已发布的消息。
// execute a synchronous delegate on send
cfg.ConfigureSend(x => x.Execute(context => {}));
// execute a synchronous delegate on publish
cfg.ConfigurePublish(x => x.Execute(context => {}));
中间件可以在总线或单独的接收端点上配置,并且这些配置位于其配置位置的本地。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)