Azure Service Bus触发器有时不会触发

问题描述 投票:1回答:1

我创建了函数app v1,其中包含一个函数。该功能是服务总线触发器。

将其发布到Azure后,我发现了这种奇怪的行为。有时功能会被触发,有时则不会。当时日志中没有错误,但是我看到消息被放入死信队列中并且“发送计数已被删除”错误。

现在,如果我尝试重新发送失败的消息 - 它再次失败。但是,如果我去门户网站,刷新功能应用程序并再次发送消息 - 它们会像往常一样被拾取和处理。

这是我发送消息的方式:

var client = new QueueClient(connectionString, queueName);
var bytes = Encoding.UTF8.GetBytes(msgStr);
var message = new Message(bytes);
await queueClient.SendAsync(message);
  • 在本地运行函数时我没有看到这个问题。
  • 新消息(<5)每15-20分钟到达一次
  • 我正在使用消费计划
  • host.json为空

请帮忙。

azure azureservicebus azure-servicebus-queues
1个回答
1
投票

冷启动

在消费计划中,如果闲置,您的功能应用程序会在10-15分钟后进入睡眠状态。任何即将到来的触发器都会唤醒您的功能应用程序,可能需要几秒钟才能称为冷启

我认为这个问题

查看您在我的意见中分享的统计数据,当您的服务总线尝试传递消息时,功能应用程序正在休眠,并且无法提供消息,因为消息无法提供。当您重新启动功能应用程序时,您的功能应用程序实例会显式预热并能够处理该窗口的消息,但在闲置期后它将再次进入休眠状态。

可能的解决方案

保持实例温暖

让您的功能应用程序始终保持热身。您可以简单地创建另一个时间触发的函数,每隔5分钟左右就会一直触发服务总线触发功能(处理消息的功能),它将使实例始终保持运行状态。

增加重试次数

您需要检查重试次数并增加到更大的数量,这样当功能应用程序唤醒时,服务总线仍然能够传递消息。

使用App服务计划

另一种方法是使用应用服务计划代替消费计划。这将使功能应用程序始终保持热身以处理消息。考虑到你的工作量(<5),它可能是一个有点昂贵的选择,因为在消费计划中,你可以免费获得每月100亿的需求。

© www.soinside.com 2019 - 2024. All rights reserved.