Azure Functions QueueTrigger никогда не срабатывает

#c# #azure-functions

#c# #azure-функции

Вопрос:

Мой queuetrigger не активируется при добавлении данных в очередь, к которой я указал привязку. У меня есть другая надежная функция, которая получает некоторые данные JSON и помещает их в эту очередь; Я знаю, что это работает, потому что я вижу, что данные отображаются в очереди с помощью проводника хранилища. Но моя функция queuetrigger никогда не срабатывает после поступления данных в очередь.

Я знаю, что это не срабатывает, потому что общее количество выполнений показывает 0 на портале.

Полная функция довольно длинная, поэтому я поделюсь тем, что, на мой взгляд, является наиболее важными ее частями:

 namespace Company.MySpecial
{
    public static class MySpecialQueueProcessor
    {
        [FunctionName("MySpecialQueueProcessor")]
        public static async void Run([QueueTrigger("myspecialqueue")]String transdata, 
        // various table mappings edited out
        ILogger log)
        {
            MySpecialItem Item = JsonConvert.DeserializeObject<MySpecialItem>(transdata);
            log.LogInformation($"[GROOVE-QUEUE] {Item.email} Queue processor activated");
        return;
        }
    }
}
  

У меня есть async там, потому что мне нужно вызвать некоторые задачи, для которых требуется await оператор, и это не позволит мне использовать await без async . Пример:

await MyData.AddAsync (Item);

И извлечение данных из таблицы:

                 do
                {
                var page = await GrooveProductMappings.ExecuteQuerySegmentedAsync(productQuery, ct);
                ct = page.ContinuationToken;
                Matches.AddRange(page.Results);
                }
                while (ct != null); 
  

Я не знаю, может ли это быть частью моей проблемы или нет.

Что-то не так с моим кодом, или есть что-то еще, чего я не сделал в Azure, что необходимо для его работы?

Комментарии:

1. В вашем коде отсутствует параметр подключения для привязки ввода QueueTrigger. Я подозреваю, что из-за этого он не подключается к вашей желаемой учетной записи хранилища (по умолчанию он использует ту же функцию host storage, если вы не укажете подключение). learn.microsoft.com/en-us/azure/azure-functions /…

Ответ №1:

У меня есть три вопроса:

  1. Правильно ли установлена строка подключения учетной записи хранилища очереди в настройках приложения функции?
  2. Правильно ли вы ссылаетесь на этот параметр в своей функции.свойство json «connection»?
  3. Вы указываете на правильную очередь в своей функции.свойство json «queueName»?

https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-storage-queue-trigger?tabs=csharp#configuration

Вы также можете проверить наличие ошибок в Application Insights «Текущие показатели» (если вы настроили его для своей функции)

Комментарии:

1. #3 — Да. #2 — В function.json , под bindings , есть connection список. Однако в вашей точке # 1 не было параметра с таким именем. Я добавил параметр с таким именем, предоставил строку подключения, полученную через портал Azure, и это сработало в первый раз! Спасибо миллион!

2. Теперь, когда это работает, я опубликую отдельную проблему, потому что она выполняется несколько раз для каждого сообщения очереди.