在ESB上标识消息的来源

时间:2015-06-23 09:35:19

标签: c# azure esb servicebus brokeredmessage

使用Azure Service Bus,是否有一种方法可以记录该消息源自的代理消息?虽然功能性很小,但如果对问题进行故障排除,我可以将其视为DevOps的有用工具。

例如,假设可以从同一ESB上的Billing和CRM应用程序发布UpdateCustomer消息。

我曾考虑为BrokeredMessage.MessageId添加应用程序名称前缀,但这似乎相当hacky。有没有更好的方法来记录消息的来源?

解决方案

感谢Gaurav Mantri的回答,我已经在BrokeredMessage对象上实现了一个扩展方法,以允许添加自定义属性的字典:

用法

BrokeredMessage message = new BrokeredMessage();

var customMessageProperties = new CustomMessageProperties()
{
    MessageOrigin = this.PublisherName,
};

message.AddCustomProperties(customMessageProperties.AllCustomProperties);

和扩展方法

public static class BrokeredMessageExtensionMethods
{
    public static void AddCustomProperties(this BrokeredMessage brokeredMessage, Dictionary<string, string> properties)
    {
        foreach (var property in properties)
        {
            brokeredMessage.Properties.Add(property.Key, property.Value);
        }
    }
}

希望这可能有助于某人。

1 个答案:

答案 0 :(得分:1)

您可以在代理消息上尝试自定义属性,该消息采用名称/值对列表:https://msdn.microsoft.com/en-us/library/microsoft.servicebus.messaging.brokeredmessage.properties.aspx

类似的东西:

                var queueClient = QueueClient.CreateFromConnectionString(ConnectionString, path);
                var msg = new BrokeredMessage("Message Content");
                msg.Properties.Add("Source", "Message Source");
                await queueClient.SendAsync(msg);