Azure服务总线触发器有时不触发

Azure服务总线触发器有时不触发,azure,azureservicebus,azure-servicebus-queues,Azure,Azureservicebus,Azure Servicebus Queues,我创建了功能应用程序v1,其中包含一个功能。该功能是一个服务总线触发器 在发布到Azure之后,我看到了这种奇怪的行为。 有时会触发函数,有时不会。当时日志中并没有错误,但我看到消息被放入死信队列,并出现“delivery count excited”错误 现在,如果我尝试重新发送失败的消息,它会再次失败。但如果我进入门户,刷新功能应用程序并再次发送消息,它们会像往常一样被接收和处理 以下是我发送消息的方式: var client = new QueueClient(connectionStri

我创建了功能应用程序v1,其中包含一个功能。该功能是一个服务总线触发器

在发布到Azure之后,我看到了这种奇怪的行为。 有时会触发函数,有时不会。当时日志中并没有错误,但我看到消息被放入死信队列,并出现“delivery count excited”错误

现在,如果我尝试重新发送失败的消息,它会再次失败。但如果我进入门户,刷新功能应用程序并再次发送消息,它们会像往常一样被接收和处理

以下是我发送消息的方式:

var client = new QueueClient(connectionString, queueName);
var bytes = Encoding.UTF8.GetBytes(msgStr);
var message = new Message(bytes);
await queueClient.SendAsync(message);
  • 在本地运行函数时,我看不到这个问题

  • 新消息(冷启动

    在消费计划中,如果功能应用程序处于空闲状态,则会在10-15分钟后进入睡眠状态。任何即将触发的触发器都会唤醒功能应用程序,这可能需要几秒钟的时间,称为冷启动

    我认为这个问题

    查看您在我看来共享的统计信息,当您的服务总线尝试传递消息时,功能应用程序正在休眠且无法传递,因为消息未能传递。当您重新启动功能应用程序时,您的功能应用程序实例已显式预热,并且能够处理该窗口的消息,但会再次启动n在空闲时间后睡觉

    可能的解决方案

    使实例保持温暖

    让你的功能应用程序一直处于预热状态。你只需创建另一个时间触发功能,每隔5分钟左右,它就会不断点击你的服务总线触发功能(处理消息的功能),它会让实例一直运行

    增加重试次数

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

    使用应用服务计划


    另一种方法是使用应用程序服务计划而不是消费计划。这将使功能应用程序在处理消息时始终处于预热状态。考虑到您的工作负载(完全有意义。增加重试次数会有所帮助。但我可能应该致力于减少功能启动时间:)谢谢!很高兴能帮上忙。你能告诉我你以前和现在的重试次数吗?当然。原来是10次,我把它增加到30次。