gpt4 book ai didi

azure - 如何锁定 Azure 存储表中的项目以一次仅允许一个 Azure 函数访问其数据

转载 作者:行者123 更新时间:2023-12-03 01:20:15 26 4
gpt4 key购买 nike

我在 Azure 存储表中添加了一个锁定标志,希望一次只有一个 Azure 函数可以访问其数据。以下是我的做法:

包含项目的 Azure 存储表:

{
partitionKey: 'foo_id'
foo: 'foo_data'
bar: 'bar_data'
isLocked: false
}

然后我有队列触发函数,仅当该项目未锁定(isLocked == false)时才处理和更新表中的 foo/bar 数据。队列触发函数如下:

def main(msg: func.QueueMessage):
is_locked = get_property_from_table('foo_id', 'isLocked')
if not is_locked:
lock_task_in_table('foo_id') #isLocked = true

#continue with business logics
#that retrieve/update foo&bar data in task

unlock_task_in_table('foo_id') #isLocked = false
else:
#do nothing

但是,当多个消息同时触发函数时,仍然可能会出现两个以上的函数同时获取表项数据并运行业务逻辑代码的情况。有什么方法可以一次只允许一个 Azure 函数访问我的 Azure 表项吗?

最佳答案

• 您可以通过租用 Azure Blob 存储和表存储来实现此目的。您可以使用此技术来确保在给定时间点只有一个 azure 函数访问表分区,并且数据更新在表之间保持一致。为此,请创建一个 Blob 和一个表条目,如下所示,并为该 Blob 指定一个与表实体的键匹配的名称:-

Table creation

以下是租约保护表访问的代码:-

Lease acquire

因此,正如您在上面看到的,try block 代码正在访问表存储中的实体并更新它,但由于我们已经使用表实体的键的引用命名了 blob 容器,因此我们获得了租约通过获得该 blob(表的命名键)的租约来获得该表实体。此外,由于我们给出了租用时间段的租用 ID(这是确定的),因此该函数将在该时间段内锁定表实体访问。上述代码在存储帐户工作区中的输出将是一个 blob 名称,该名称与表实体的分区键以及实体表中的表存储中的条目相匹配。

因此,通过这种方式,您可以通过这个租用函数对某些表条目创建锁。欲了解更多信息,请参阅以下链接:-

https://www.azurefromthetrenches.com/acquiring-locks-on-table-storage/

关于azure - 如何锁定 Azure 存储表中的项目以一次仅允许一个 Azure 函数访问其数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71122775/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com