Azure Функция с схемой выключателя ServiceBusTrigger - PullRequest
1 голос
/ 05 мая 2020

У меня есть функция Azure с ServiceBusTrigger, которая отправляет содержимое сообщения в веб-сервис за Azure API Manager. В некоторых случаях нагрузка на бэкэнд (стороннего) веб-сервера слишком высока, и он сворачивается, возвращая ошибку 500.

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

Я рассмотрел следующее:

  • Отключите функцию azure, но это может привести к потере данных из-за нескольких сообщений в памяти (serviceBus.prefetchCount)
  • Внедрить API Manager с политикой ограничения скорости, но это кажется контрпродуктивным, поскольку в большинстве случаев он работает нормально.
  • Изменение архитектуры стороннего веб-сервиса выходит за рамки:)
  • Установите queue на ReceiveDisabled, это предпочтительное решение, но оно приводит к тому, что моя InputBinding генерирует огромное количество исключений MessagingEntityDisabledExceptions, которые я (пока) не могу поймать и обработать самостоятельно. Я проверил документацию для host. json, ServiceBusTrigger и параметров Run, но не смог найти там полезную настройку.
  • Сохраните какой-то набор результатов кода ответа и увеличьте время повтора, что не идеально для бессерверного сценарий с несколькими параллельными функциями.
  • Разрешить диспетчеру API сопоставить 500 ошибок с 429 и перепланировать их позже, вероятно, сработает, но, поскольку мы отправляем много сообщений, это будет затруднять работу службы на некоторое время. Кроме того, трудно отличить guish между временной ошибкой 500 и последовательной.

Обратите внимание, что этот вопрос не касается решения, запускать автоматический выключатель или нет, просто чтобы впоследствии выполнить соответствующее действие.

Дополнительная информация

  • Azure functionsV2, do tnet Core 3.1 запускается в плане потребления
  • API Manager запускает Basi c SKU
  • Service Bus работает на уровне Premium Messagecount: 300,000
...