我有一个Azure Function App,其中Python函数已启用服务总线触发器。我注意到在与Function App关联的存储帐户中,有一个名为azure-webjobs-hosts
的存储容器,其中有一个名为locks
的文件夹。它有几个文件夹,其名称与我的Function App完全相同(或者我的App Service计划,不确定,因为它们的名字是一样的),而且它们每个里面都有一个hosts
文件。我的函数应用被扩展到多个示例。每当我为我的一个函数应用检查hosts
文件时,blob的元数据总是包含单个条目,如this。我花了无数个小时试图了解幕后发生了什么,因为我有多个示例正在运行,但只有一个“FunctionInstance”租用此blob。这是否会影响其他示例处理我的服务总线队列消息?为什么这个blob始终只被其中一个示例租用?(如果我重启Function App,重启后它可能会被另一个示例ID租用,所以我猜它通常是该Function App的一个示例的ID,但根据元数据,它确实是由单个示例租用的)即使我在这里没有受到影响,你能提供一个例子吗?Azure Functions使用这个hosts
文件,以及为什么它在启动时试图锁定?
我开始在本地进行实验,以更好地理解正在发生的事情。我发现如下:(使用func start
)向这个blob发出一个HEAD请求,然后使用comp=lease
URL参数向这个blob发出一个PUT请求,然后是另一个HEAD请求,最后在另一个使用comp=metadata
URL参数的PUT请求之后,我得到以下日志行:Host lock lease acquired by instance ID '000000000000000000000000711A638F'.
在此之后,它开始处理来自队列的服务总线消息。然而,我在此机器上启动的第二个函数从未获得Host lock lease acquired by instance ID 'xxx'.
消息,它定期向此blob发送HEAD请求,并且似乎从未获取blob用于租用。然而,该第二个函数也由队列中的消息触发,并像第一个函数那样按预期处理它们。
请解释learning hosts文件背后的逻辑。(PS:我有我的函数应用程序扩展到3个示例,我有Azure函数高级计划)
1条答案
按热度按时间qyzbxkaa1#
x1c 0d1x的数据
的
根据这个博客:
而 *azure-webjobs-host * 容器则托管三个文件夹: