【问题标题】:Azure Function local debugging - how to restrict it to single thread or message?Azure Function 本地调试 - 如何将其限制为单线程或消息?
【发布时间】:2020-06-06 16:53:38
【问题描述】:

我有一个 Azure 服务总线触发的 Azure 函数。当我在本地运行 Azure 函数时,它会启动 16 个线程并在每个线程中获取 16 条消息。我该如何配置它,使它只运行一条消息,这样我就可以调试它,而同一个断点不会被命中 16 次?

我尝试在 host.json 文件中设置配置(如下所示)以一次仅从 Azure 服务总线获取 1 条消息,但这没有帮助。

{
  "version": "2.0",
  "extensions": {
    "serviceBus": {
      "prefetchCount": 100,
      "messageHandlerOptions": {
        "autoComplete": false,
        "maxConcurrentCalls": 1,
        "maxAutoRenewDuration": "00:55:00"
      }
    }
  }
}

编辑 1: 我目前所做的是通过在正文中包含消息输入的 http 请求触发函数的管理端点。这样做的问题是 http 请求正文必须包含 {"input":"{}"} 并且我每次都必须花时间使用转义的双引号创建有效的 json。如果我能够将功能配置为从服务总线主题一次运行一条消息,那会容易得多。

【问题讨论】:

  • maxConcurrentCalls 正是这样做的。此外,您不需要 20 的预取。由于它是本地环境,您可以发布一条消息并且队列中只有一条消息吗?无论并发性如何,这也将起作用。
  • 但是这个 host.json 对我没有任何影响。它仍然接收 16 条消息。我不想处理有多少消息发送到服务总线主题。我正在寻找一种在调试时一次检索 1 条消息的方法。
  • 当您的断点第一次命中时,只需删除断点 - 您将能够通过 step into/over 等方式继续执行该特定触发器,并且您应该看到它继续执行相同的触发器即使在进入/结束等待呼叫等时也是如此。
  • 我不知道为什么 host.json 不适合你(在 GitHub 中提出问题)。无论并发性如何,队列中的单个消息都应该工作。
  • 也许你可以试试单例属性或者分享你的代码。你是什​​么意思你是通过http请求触发的?你说的是服务总线触发功能。

标签: azure-functions local azureservicebus azure-functions-core-tools azure-function-async


【解决方案1】:

原来我在运行函数时犯了一个错误(感到羞愧..)。 Host.json 文件未复制到 bin 文件夹,因此无法识别。 host.json 配置确实按预期工作,并将函数限制为一次处理一条消息。

【讨论】:

    【解决方案2】:

    尝试在您的 local.settings.json 中设置此项以覆盖您的 host.json 文件。这样你就不需要改变你的 host.json 这会阻止你 意外提交对 host.json 的更改。

    {
       "Values": { 
       "AzureFunctionsJobHost__extensions__serviceBus__messageHandlerOptions__maxConcurrentCalls": 1
       }
    }
    

    结果是你的host.json(在运行时)会变成这个

    "extensions": {
      "serviceBus": {
       "messageHandlerOptions": {
        ...
        "maxConcurrentCalls": 1 -> added setting
        ...
      }
    }
    

    }

    【讨论】:

      【解决方案3】:

      host.json 应该是:

      {
        "version": "2.0",
        "extensions": {
          "queues": {
            "batchSize": 1
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-06
        • 1970-01-01
        • 2021-09-17
        • 2011-10-07
        • 2022-12-04
        • 2021-11-05
        • 2021-08-02
        • 1970-01-01
        相关资源
        最近更新 更多