我希望能够将自定义属性添加到队列/主题消息中,因为我将其放置在Azure功能的队列中。自定义属性用于将消息过滤到不同的主题。我必须遗漏一些东西,因为这个工作示例似乎没有任何地方可以放置自定义属性。
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,
TraceWriter log,
ICollector<Contact> outputSbMsg)
{
var contactList = await req.Content.ReadAsAsync<ContactList>();
foreach(var contact in contactList.Contacts)
{
if (contact.ContactId == -1)
{
continue;
}
contact.State = contactList.State;
outputSbMsg.Add(contact);
}
}
我通过Azure门户编写功能。联系人列表通过http请求的正文进入函数。这些函数解析每个联系人,添加修改一些属性并将每个联系人提交给队列主题。另外,我从请求标头和联系人列表中提取其他数据,我想使用队列主题中的数据将请求过滤到不同的订阅中。
修改
根据@Sean Feldman的建议,在将BrokeredMessage添加到输出集合之前,将数据添加到BrokeredMessage。关键部分是在将联系对象添加到BrokeredMessage之前序列化联系对象。
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req,
TraceWriter log,
ICollector<BrokeredMessage> outputSbMsg)
{
var contactList = await req.Content.ReadAsAsync<ContactList>();
foreach(var contact in contactList.Contacts)
{
if (contact.ContactId == -1)
{
continue;
}
string jsonData = JsonConvert.SerializeObject(contact);
BrokeredMessage message = new BrokeredMessage(jsonData);
message.Properties.Add("State", contactList.State);
outputSbMsg.Add(message);
}
}
谢谢
答案 0 :(得分:2)
为了能够设置custom/user properties,输出收集器应该是本机Azure Service Bus消息类型BrokeredMessage
。
在您的情况下,您必须将ICollector<Contact>
更改为ICollector<BrokeredMessage>
。