繁体   English   中英

如何管理并发 Http 触发的 Azure 函数的数据?

[英]How to manage data on concurrent Http Triggered Azure Functions?

我的 Azure Function 中有以下代码:

string id = Guid.NewGuid().ToString();
myObject.id = id;

现在,如果我同时进行多个 http 调用,并发调用最终会具有相同的 ID,我希望它们具有不同的 ID。

我试过更改 host.json,但没有成功。 无论如何,这是 host.json 中的代码:

{
  "version": "2.0",
  "extensions": {
    "http": {
      "maxConcurrentCalls": 1
    }
  }
}

Azure Function 版本:2 Do.net 版本:5.0

我该如何解决这个问题?

取自Guid.NewGuid 方法文档。

这是一个方便的 static 方法,您可以调用它来获取新的 Guid。 该方法创建版本 4 通用唯一标识符 (UUID),如 RFC 4122,第 1 节中所述。 4.4. 返回的 Guid 保证不等于 Guid.Empty。

在 Windows 上,这个 function 包装了对 CoCreateGuid function 的调用。生成的 GUID 包含 122 位的强熵。

在非 Windows 平台上,从 .NET 6 开始,这个 function 调用操作系统的底层加密安全伪随机数生成器 (CSPRNG) 以生成 122 位的强熵。 在 .NET 之前的版本中,不保证熵是由 CSPRNG 生成的。

所引用的 RFC 指出:

版本 4 UUID 用于从真随机数或伪随机数生成 UUID。

算法如下:

  • clock_seq_hi_and_reserved的两个最高有效位(位 6 和 7)分别设置为零和一。
  • time_hi_and_version字段的四个最高有效位(位 12 到 15)设置为第 4.1.3 节中的 4 位版本号。
  • 将所有其他位设置为随机(或伪随机)选择的值。

根据这些规范,两次调用同一个 Azure Function 生成相同的 GUID 应该是不可能的。 一些本地测试表明(在可测试的请求数量中)这是不可能的。

您可能在某处拥有 static 财产或 object,这就是您的相同 ID 的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM