Azure.Messaging.ServiceBus SendMessageAsync 每 2 分钟超时一次?

Azure.Messaging.ServiceBus SendMessageAsync timing out every 2 min?

我们目前在 k8s 集群中使用 v3 azure 函数将多条消息发送到服务总线中的不同队列。

这是我们使用的代码:

await using ServiceBusClient client = new ServiceBusClient(_configuration["AzureWebJobsServiceBus"]);

ServiceBusSender sender = client.CreateSender(queueName);
ServiceBusMessage message = new ServiceBusMessage(response);

await sender.SendMessageAsync(message);

出于某种原因,我们可以观察到一种模式,即每隔 2 分钟我们的 .SendMessageAsync() 似乎会冻结并最终在 2 分钟后超时。

如果我们增加并行函数的数量 运行,我们会观察到更高的峰值,但超时会以相同的间隔发生。

来自 AppInsight 的失败方法:

Azure.Messaging.ServiceBus.Amqp.AmqpConnectionScope+d__57.MoveNext

我们相信,当我们调用 .SendMessageAsync 时,会尝试连接到队列,但最终会超时。我们知道 Azure Service Bus quotas,目前 运行 在标准层。当我们查看服务总线的指标时,似乎没有什么是红色的。

在网上进行了彻底的研究后,我们似乎无法在任何地方(或其他任何人)找到任何与我们有同样问题的信息。

正在使用的包:

我们是否有机会找到问题的解决方案或原因?

您可以尝试的一件事是在 Azure Function 实例之间共享 ServiceBusClient:

private static ServiceBusClient _client = new ServiceBusClient(Environment.GetEnvironmentVariable("AzureWebJobsServiceBus"));

[FunctionName("HttpTriggerCSharp")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
    HttpRequest req, ILogger log)
{
    log.LogInformation("C# HTTP trigger function processed a request.");

    ServiceBusSender sender = _client.CreateSender(Environment.GetEnvironmentVariable("QueueName");
    ServiceBusMessage message = new ServiceBusMessage(response);

    await sender.SendMessageAsync(message);
    
    return new OkObjectResult();
}

更多信息:

https://docs.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/

https://youtu.be/XO7TjQOQB_A?t=2450

您可能 运行 达到提到的 5000 个连接限制 here。每个 ServiceBusClient 实例都使用自己的 AMQP 连接。