识别消息在 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);
使用 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);