带有ServiceBusTrigger断路器模式的Azure功能

时间:2020-05-05 14:22:49

标签: azure azure-functions azure-servicebus-queues

我有一个带有ServiceBusTrigger的Azure函数,它将消息内容发布到Azure API管理器后面的Web服务中。在某些情况下,(第三方)网络服务器后端的负载太高,它会崩溃并返回错误500。

我正在这里寻找实现断路器的适当方法。

我考虑了以下内容:

  • 禁用azure功能,但是由于内存中有多个消息(serviceBus.prefetchCount),它可能会导致数据丢失
  • 使用速率限制策略实施API管理器,但这似乎适得其反,因为它在大多数情况下运行良好
  • 重新架构第三方Web服务超出范围:)
  • 将队列设置为ReceiveDisabled,这是首选的解决方案,但是它导致我的InputBinding抛出大量MessagingEntityDisabledExceptions,而我(到目前为止)无法捕获并处理自己。我已经检查了文档中的host.json,ServiceBusTrigger和Run参数,但无法在其中找到有用的设置。
  • 保留某种响应代码结果集并增加重试时间,这在具有多个并行功能的无服务器场景中并不理想。
  • 让API管理器将500个错误映射到429个错误,并在以后重新安排它们的时间,可能会起作用,但是由于我们发送了大量消息,因此它将在一段时间内影响该服务。此外,很难区分暂时的500错误还是连续的错误。

请注意,此问题不是要决定是否触发断路器,而仅仅是要事后处理适当的动作。

其他信息

  • Azure功能V2,dotnet core 3.1在消费计划中运行
  • API Manager运行基本SKU
  • 服务总线在高级级别运行 消息数:300.000

0 个答案:

没有答案