Пользовательские свойства сообщения в очереди Azure / сообщении темы из функции Azure - PullRequest
0 голосов
/ 22 мая 2018

Я хотел бы иметь возможность добавлять пользовательские свойства в сообщение очереди / темы, поскольку я помещаю его в очередь из функции 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);
            }
        }

Спасибо

1 Ответ

0 голосов
/ 22 мая 2018

Чтобы иметь возможность установить пользовательские / пользовательские свойства , сборщик вывода должен иметь собственный тип сообщения Azure Service Bus, BrokeredMessage.

Inваш случай, вам придется изменить ICollector<Contact> на ICollector<BrokeredMessage>.

...