Триггер служебной шины Azure иногда не срабатывает - PullRequest
1 голос
/ 17 марта 2019

Я создал приложение функции v1 с одной функцией в нем. Функция представляет собой триггер служебной шины.

После публикации в Azure я вижу это странное поведение. Иногда функция срабатывает, а иногда нет. В то время в журналах не было ошибок, но я вижу, что сообщения были помещены в очередь недоставленных сообщений с ошибкой «число доставленных исключено».

Теперь, если я попытаюсь отправить сообщения с ошибками - снова произойдет ошибка. Но если я захожу на портал, обновляю приложение-функцию и снова отправляю сообщения - они принимаются и обрабатываются как обычно.

Вот как я могу отправлять сообщения:

var client = new QueueClient(connectionString, queueName);
var bytes = Encoding.UTF8.GetBytes(msgStr);
var message = new Message(bytes);
await queueClient.SendAsync(message);
  • Я не вижу этой проблемы при локальном запуске функции.
  • Новые сообщения (<5) приходят каждые 15-20 минут </li>
  • Я использую план потребления
  • host.json пуст

Пожалуйста, помогите.

1 Ответ

1 голос
/ 18 марта 2019

Холодный запуск

По плану потребления ваше функциональное приложение переходит в спящий режим через 10-15 минут, если оно не используется.Любой предстоящий триггер пробуждает ваше функциональное приложение, которое может занять пару секунд, называемое холодным стартом.

Проблема, на мой взгляд,

Глядя на статистику, которую вы поделились, по моему мнению, когда ваша служебная шина пытается доставить сообщение, приложение функции спит и не может доставитьУчитывая это сообщение не удалось доставить.При перезапуске приложения-функции экземпляр приложения-функции явно нагревается и может обрабатывать сообщения для этого окна, но после периода ожидания он снова переходит в спящий режим.

Возможные решения

Держите экземпляр в тепле

Держите приложение-функцию в тепле все время.Вы можете просто создать другую функцию, запускаемую по времени, которая будет продолжать активировать функцию, запускаемую служебной шиной (функцию, которая обрабатывает сообщения) каждые 5 минут или около того, она будет поддерживать работу экземпляра все время.

Увеличение количества повторных попыток

Вам необходимо проверить количество повторных попыток и увеличить его до большего числа, чтобы при пробуждении функциональных приложений служебная шина все еще могла доставлять сообщения.

Использование плана обслуживания приложения

Другой способ - использовать план обслуживания приложения вместо плана потребления.Это будет постоянно держать приложение-функцию для обработки сообщений.учитывая вашу рабочую нагрузку (<5), это может быть немного дорогим вариантом, поскольку в плане потребления вы получаете 1 млн. запросов в месяц бесплатно.</p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...