识别消息在 ESB 上的来源

Identifying a message's origin on an ESB

使用 Azure 服务总线,有没有一种方法可以记录消息的来源?虽然功能用途很少,但如果解决问题,我可以将其视为 DevOps 的有用工具。

例如,想象一条 UpdateCustomer 消息可以从同一 ESB 上的计费和 CRM 应用程序发布。

我曾考虑过在 BrokeredMessage.MessageId 前加上应用程序名称前缀,但这似乎很老套。有没有更好的方法来记录消息的来源?

解决方案

感谢 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);
        }
    }
}

希望这可能对某人有所帮助。

您可以在采用 name/value 对列表的代理消息上尝试自定义属性: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);