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.Messaging.ServiceBus 7.1.2
- Microsoft.NET.Sdk.Functions 3.0.11
我们是否有机会找到问题的解决方案或原因?
您可以尝试的一件事是在 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/
您可能 运行 达到提到的 5000 个连接限制 here。每个 ServiceBusClient 实例都使用自己的 AMQP 连接。
我们目前在 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.Messaging.ServiceBus 7.1.2
- Microsoft.NET.Sdk.Functions 3.0.11
我们是否有机会找到问题的解决方案或原因?
您可以尝试的一件事是在 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/
您可能 运行 达到提到的 5000 个连接限制 here。每个 ServiceBusClient 实例都使用自己的 AMQP 连接。