如何在Rebus中获取源地址?

时间:2015-11-25 08:29:01

标签: servicebus rebus

如何在收到的邮件中获取源地址?

背景是我正在为使用Rebus实现的服务总线设计监视器。我使用发布 - 订阅模式,因此总是在主题上发布消息。监视器订阅所有主题,以便监督服务发送了什么,因此是活着和健康的。虽然在消息处理程序中,收到的消息不包含任何标识服务发布的源地址或信息。这意味着无法监督哪些服务活跃且健康。当然我可以创建一个属性" Service"识别所有消息中的服务发布。这意味着每个服务都必须在发布消息之前设置属性,我觉得这有点麻烦。源地址在那里,可以识别服务发布。

1 个答案:

答案 0 :(得分:0)

当您在Rebus消息处理程序中时,您可以访问IMessageContext - 通过IoC容器注入它(这是更好的方式,因为可测试性得到改善),或者访问静态MessageContext.Current属性。

消息上下文使您可以访问一些内容,其中传入传输消息的标头可用于获取消息的返回地址(默认情况下,该地址设置为发送方的输入队列)。

这样的事情可以解决问题:

public class SomeHandler : IHandleMessages<SomeMessage>
{
    readonly IMessageContext _messageContext;

    public class SomeHandler(IMessageContext messageContext)
    {
        _messageContext = messageContext;
    }

    public async Task Handle(SomeMessage message)
    {
        var headers = _messageContext.TransportMessage.Headers;
        var returnAddress = headers[Headers.ReturnAddress];

        // .. have fun with return address here
    }
}