Azure函数通过clientRetryOptions和host.json进行队列绑定重试不起作用

lfapxunr  于 2023-08-07  发布在  其他
关注(0)|答案(1)|浏览(84)

我正在使用隔离进程,如https://learn.microsoft.com/en-us/azure/azure-functions/functions-bindings-service-bus?tabs=isolated-process%2Cextensionv5%2Cextensionv3&pivots=programming-language-csharp#hostjson-settings所示
我需要实现一些重试之间的延迟理想情况下通过队列上消息的可见性延迟。异常后的睡眠允许延迟,但会阻止其他消息的处理。
我宁愿避免持久的功能
当通过host.json文件设置clientRetryOptions时,我认为应该在这里应用,我没有看到任何效果,例如减少最大重试次数或增加延迟。
编辑:此设置是否仅用于连接到Azure服务总线?也许我需要一些与initialvisibilitydelay的交互?

{
  "version": "2.0",
  "extensions": {
    "serviceBus": {
      "clientRetryOptions": {
        "mode": "fixed",
        "tryTimeout": "00:03:00",
        "delay": "00:00:05.00",
        "maxDelay": "00:01:00",
        "maxRetries": 2
      }
    }
  },
  "logging": {
    "applicationInsights": {
      "samplingSettings": {
        "isEnabled": true,
        "excludedTypes": "Request"
      }
    }
  }
}

字符串


的数据

[Function("QueueTest")]
    public void Test([ServiceBusTrigger("test", Connection = "ServiceBusConnection")] string item,
     FunctionContext context)
    {
        StringBuilder log = new StringBuilder();
        log.AppendLine("Created at " + DateTime.Now);
        MessagingContext.ProcessedMessages.Add(new ProcessedMessage
        {
            Interface = "QueueTest",
            CreatedDate = DateTime.Now,
            Status = "Error",
            MessageId = "Test",
            QueueMessageId = "Test",
            Details = log.ToString()
        });
        MessagingContext.SaveChanges();
        throw new InvalidOperationException("Pretend failure");
    }

ryhaxcpt

ryhaxcpt1#

Azure Functions不为服务总线触发器提供重试策略,而是依赖于本机服务总线重试。服务总线的本机重试不允许延迟重试。
有一个feature request支持用自定义延迟放弃消息,但它还没有出来。另一种方法是接收消息,克隆它,并在完成原始消息的同时延迟发送它,但这需要调用服务操作(完成消息,发送消息)的能力,这也是不可能的。这里有一个tracking issue的功能是在progerss工作。

相关问题