运行一段时间后,Azure服务总线队列触发器功能无法获取我的排队消息

use*_*050 5 asp.net-mvc azure azureservicebus azure-servicebus-queues azure-functions

我在Azure中有一个服务总线队列和一个服务总线队列触发器功能.当我第一次发布该函数并向服务总线队列发送消息时,该函数被触发并运行正常.

但是,如果我不管它并且不发送任何消息到队列说~1小时,然后我发送消息,该功能不会被触发.我必须通过按"运行"在门户中再次手动运行该功能,或者我必须将其重新发布到Azure.

我如何保持运行,所以我不必每小时左右重新启动它?我的应用可能不会在几小时甚至几天内向队列发送新消息.

仅供参考 - 我在这里看到该功能在5分钟后关闭,如果是这种情况我不能使用功能而且我不想使用定时器触发器因为那时我会运行该功能然后我想要,浪费钱!对?如果我唯一的,最好的选择是在一天中每隔30分钟运行一次计时器功能,我可能只需要这样做就行了,但我更喜欢在消息点击消息时运行该功能队列.

仅供参考 - 最终我想隐藏消息,直到某个日期,当我第一次将其推送到队列时(例如,设置为从放入队列的时间开始显示1周).我想要完成什么?我想在课程结束后向注册学生发送电子邮件,课程可能会提前1-30天安排.因此,当课程安排完成后,我不希望该功能在课程结束后运行,这可能是在我的应用程序中最初安排课程后的1周,2周2天,3周3天等.

这是function.json的片段

{
"generatedBy": "Microsoft.NET.Sdk.Functions-1.0.0.0",
"configurationSource": "attributes",
"bindings": [
{
  "type": "serviceBusTrigger",
  "connection": "Yogabandy2017_RootManageSharedAccessKey_SERVICEBUS",
  "queueName": "yogabandy2017",
  "accessRights": "listen",
  "name": "myQueueItem"
}
],
"disabled": false,
"scriptFile": "..\\bin\\PostEventEmailFunction.dll",
"entryPoint": "PostEventEmailFunction.Function1.Run"
}
Run Code Online (Sandbox Code Playgroud)

这是功能

public static class Function1
{
    [FunctionName("Function1")]
    public static void Run([ServiceBusTrigger("yogabandy2017", AccessRights.Listen, Connection = "Yogabandy2017_RootManageSharedAccessKey_SERVICEBUS")]string myQueueItem, TraceWriter log)
    {
        log.Info($"C# ServiceBus queue trigger function processed message: {myQueueItem}");


    }
}
Run Code Online (Sandbox Code Playgroud)

我被要求发布我的付款计划

在此输入图像描述

Jas*_*ong 2

我怀疑您正在使用下面的方案 1 和 2 - 该方案将在一段时间没有活动后关闭。

  1. 免费/共享应用程序服务计划中的 Function 应用程序。Always On 不可用,因此您需要升级您的套餐。

  2. 基本/标准/高级应用程序服务计划上的功能应用程序。您需要确保在“应用程序设置”功能中选中“始终开启”

  3. 如果功能应用程序使用消耗计划,这应该可以工作。它将根据每个请求唤醒函数应用程序。对于您的场景,我会推荐这种方法,因为它仅在需要时使用资源。

FYI1 - 如果您使上述工作正常,您将不需要计时器。

应用程序设置中的消费计划将如下所示: Azure 函数消费计划