【问题标题】:Azure Functions - Queue trigger consumes message on failAzure Functions - 队列触发器在失败时使用消息
【发布时间】:2018-12-26 15:52:27
【问题描述】:

仅当我使用 Azure 门户编辑器时才会出现此问题。如果我从 Visual Studio 上传,则不会出现此问题,但由于此无关错误,我无法从 Visual Studio 上传:Azure Functions - only use connection string in Application Settings in cloud for queue trigger。

在使用 Azure 门户编辑器时,如果我从 C# 引发异常或从 JavaScript 使用 context.done(error),Application Insights 会显示发生错误,但只会使用该消息。消息不会重试,也不会进入有害队列。

从 Visual Studio 上传时,相同的 C# 代码会正确重试,所以我认为这是一个配置问题。我尝试将 Azure 门户编辑器版本的 host.json 文件修改为:

{
  "queues": {
        "visibilityTimeout": "00:00:15",
        "maxDequeueCount": 5
    }
}

但消息仍在被消耗而不是重试。如何解决此问题,以便在使用 Azure 门户编辑器进行编码时获得消息以重试?

注意事项:

在 JavaScript 中,context.bindingData.dequeueCount 返回 0。

Azure Function 运行时版本:1.0.11913.0 (~1)。

我正在使用消费应用计划。

【问题讨论】:

  • 有趣。我想从我们这边来看这个;您介意分享以下信息吗? 1) 你的函数应用的名称 (here's how to share privately),2) 你的函数的名称,以及 3) 你观察到这个的时间范围。
  • 功能于 2018-07-18T17:01:01.460 开始 (Id=f6ca5d6b-3b63-4696-9be5-0d9d33785dc4)。功能在 2018-07-18T17:01:04.350 完成(失败,Id=f6ca5d6b-3b63-4696-9be5-0d9d33785dc4,持续时间=2892ms)。
  • 我们的日志表明您提供给我的信息是手动触发的函数调用(可能来自门户),因此我没有关于队列行为的信息。你能给我live组件的信息吗?
  • 没错。让我手动将消息添加到队列中,听起来会达到您想要的效果。
  • 好吧,那行得通。我一定是误解了手动触发器的行为。谢谢!

标签: azure azure-functions


【解决方案1】:

我使用的是 Azure 门户编辑器中的手动触发器,它的行为与在队列中创建消息不同。当我将消息放入队列时,Azure 函数按预期工作。

【讨论】:

    【解决方案2】:

    对于本地开发,如果您的函数是异步的,请使用 Task 作为返回类型。

    public async Task Run
    

    而不是void:

    public async void Run
    

    【讨论】:

      猜你喜欢
      • 2018-12-17
      • 1970-01-01
      • 2020-07-11
      • 2017-10-09
      • 1970-01-01
      • 2021-02-23
      • 2022-06-10
      • 2017-09-14
      • 1970-01-01
      相关资源
      最近更新 更多