如何确保一次只允许一个 Azure Functions 事件网格触发器实例 运行?
How to ensure only one Azure Functions Event Grid Trigger instance is allowed to run at at time?
我有几个事件网格触发器使用 Python 在 Linux 消耗计划上,当在 Azure 存储中创建新的 blob 时执行。如果 blob 是在同一时间或大约同时创建的,那么多个函数实例可能会同时 运行。例如,我有两个事件触发器,用于查找使用以下格式创建的 blob:
触发器 1
"subjectBeginsWith": "/blobServices/default/containers/client1",
"subjectEndsWith": ".txt"
触发器 2
"subjectBeginsWith": "/blobServices/default/containers/client2",
"subjectEndsWith": ".txt"
如果同时创建两个 blob,我想将 Azure Functions 限制为一次只能 运行 一个应用程序(哪个并不重要)以防止内存问题。这种情况相当罕见,因此我正在考虑使用预览设置 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
一次只允许一次调用 运行。这行得通还是有更好的方法?
我还有另一个问题,即每个客户端可能会在大约同一时间创建多个 blob,而我只关心每天是否处理一个。例如,客户端 1 可能在一天内创建了以下文件:
client1/file1_20201024.txt
client1/file2_20201024.txt
client1/file3_20201024.txt
我只关心一天创建一个文件。我可以在代码中创建特殊的异常处理以查看工作是否已完成,然后使用 Python 脚本 return,但我想知道事件网格中是否有内置设置来处理案例像这样。即,如果在一分钟内创建了三个 blob,则只创建一个事件而不是三个。
问题 1:
您应该使用存储队列事件处理程序(而不是 azure 函数)将事件推送到队列,然后 pull-up 它们 one at the time. Note, in the case of multiple VMs, you can use a leased blob technic to control a concurrency across multiple VMs, see more details .
问题 2:
Azure 事件网格中没有 built-in 满足您所描述需求的功能,因此必须在订阅者逻辑中进行处理。
我有几个事件网格触发器使用 Python 在 Linux 消耗计划上,当在 Azure 存储中创建新的 blob 时执行。如果 blob 是在同一时间或大约同时创建的,那么多个函数实例可能会同时 运行。例如,我有两个事件触发器,用于查找使用以下格式创建的 blob:
触发器 1
"subjectBeginsWith": "/blobServices/default/containers/client1",
"subjectEndsWith": ".txt"
触发器 2
"subjectBeginsWith": "/blobServices/default/containers/client2",
"subjectEndsWith": ".txt"
如果同时创建两个 blob,我想将 Azure Functions 限制为一次只能 运行 一个应用程序(哪个并不重要)以防止内存问题。这种情况相当罕见,因此我正在考虑使用预览设置 WEBSITE_MAX_DYNAMIC_APPLICATION_SCALE_OUT
一次只允许一次调用 运行。这行得通还是有更好的方法?
我还有另一个问题,即每个客户端可能会在大约同一时间创建多个 blob,而我只关心每天是否处理一个。例如,客户端 1 可能在一天内创建了以下文件:
client1/file1_20201024.txt
client1/file2_20201024.txt
client1/file3_20201024.txt
我只关心一天创建一个文件。我可以在代码中创建特殊的异常处理以查看工作是否已完成,然后使用 Python 脚本 return,但我想知道事件网格中是否有内置设置来处理案例像这样。即,如果在一分钟内创建了三个 blob,则只创建一个事件而不是三个。
问题 1:
您应该使用存储队列事件处理程序(而不是 azure 函数)将事件推送到队列,然后 pull-up 它们 one at the time. Note, in the case of multiple VMs, you can use a leased blob technic to control a concurrency across multiple VMs, see more details
问题 2: Azure 事件网格中没有 built-in 满足您所描述需求的功能,因此必须在订阅者逻辑中进行处理。