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

时间:2017-12-10 00:56:43

标签: asp.net-mvc azure azure-functions azureservicebus azure-servicebus-queues

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

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

如何让它继续运行,所以我不必每小时左右重启一次? 我的应用可能不会在几小时甚至几天内向队列发送新消息。

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

FYI2 - 最终我想要隐藏消息直到特定日期,当我第一次将其推送到队列时(例如,设置为从放入队列的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"
}

这是函数

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}");


    }
}

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

enter image description here

2 个答案:

答案 0 :(得分:2)

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

  1. 免费/共享应用服务计划上的功能应用。 Always On无法使用,因此您可以升级您的计划。

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

  3. 功能中选中“始终打开”
  4. 如果功能应用使用消费计划,这应该有效。它会在每个请求上唤醒功能应用程序。对于您的场景,我建议使用此方法,因为它仅在需要时使用资源。

  5. FYI1 - 如果你完成上述工作,你将不需要计时器。

    应用程序设置中的消费计划如下所示: Azure Function Consumption Plan

答案 1 :(得分:1)

请检查您的服务计划 1.平台功能 2.应用服务计划 3.在定价层

请为您提供应用名称。