gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 23:24:09 25 4
gpt4 key购买 nike

我们目前在 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 分钟后超时。

message graph

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

来自 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://learn.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/

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

关于c# - Azure.Messaging.ServiceBus SendMessageAsync 每 2 分钟超时一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67790987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com