【发布时间】: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