rebus - Rebus Pub Sub:检索订阅者的标头
问题描述
标头与 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?
}
解决方案
接受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));
推荐阅读
- javascript - 通过 XHR 使用 Promise GET 返回待处理的 Promise
- java - 如何为 OpenID Connect 编写 Google 应用程序?
- java - Selenium:等待可见但不可点击的按钮
- java - Libgdx box2d 主体放置在错误的 y 坐标处
- pipeline - 为什么流水线不能以最大理论速度运行?
- python - 如何从 python 脚本打开一个新的控制台并能够管理它
- react-native - Podfile - 指定子依赖版本
- keras - 使用 CRF 进行多元二进制序列预测
- angular - 如何通过 HTTP POST 提供 asp.net 核心 Angular SPA
- sql - 在更新到字符变量之前删除小数点