代码之家  ›  专栏  ›  技术社区  ›  TGnat

来自Azure函数的Azure队列/主题消息的自定义消息属性

  •  1
  • TGnat  · 技术社区  · 7 年前

    我希望能够将自定义属性添加到队列/主题消息中,因为我将其放置在来自和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。关键部分是在将contact对象添加到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);
                }
            }
    

    谢谢你

    1 回复  |  直到 7 年前
        1
  •  2
  •   Sean Feldman    7 年前

    能够设定 custom/user properties ,输出收集器应为本机Azure服务总线消息类型, BrokeredMessage

    在你的情况下,你必须改变 ICollector<Contact> ICollector<BrokeredMessage>