使用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);
}
}
}
希望这可能有助于某人。
答案 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);