图形 API 寻呼呼叫的持久功能?

Durable Functions with Graph API Paging Call?

我一直在阅读有关使用 C# 和长 运行 任务的持久函数的一些资料,并且正在尝试想出一种方法来处理长 运行 Graph API 调用(例如,针对组的用户)。我知道分页将从 Graph 调用(使用 C# Graph SDK)返回,并且我正在尝试考虑一种方式,让 Orchestration 可以继续处理来自 NextPage 请求的工作,直到没有更多页面为止。

我的一些想法是:

  1. 将每个 Graph 调用的 nextToken 保存在外部数据源中,当 Orchestration 唤醒时,它将获取此令牌并使用它调用 activity 函数,直到 nextToken returns 空。但我担心这违背了 Orchestration Function 的非确定性原则。

  2. 使用页面迭代器 https://docs.microsoft.com/en-us/graph/sdks/paging?tabs=csharp 并在每次迭代时调用 activity 函数来处理每个页面结果。 (也许在模式中使用风扇 out/fan 进行处理,同时牢记图形节流)

  3. 首先从 Activity 函数获取用户的所有页面并在 foreach 循环中处理它们 - 简单但我想知道内存存储以及结果很大的问题设置。

我只是想我会询问并查看以确保我正确地考虑了这个问题。我想知道的最后一件事是,对于这个框架,这可能是不可能的或不切实际的。谢谢。

对于这个需求,我觉得你可以使用带有消费计划的azure通用函数(不需要使用持久函数)。根据这个document,我们知道有消费计划的函数最大内存为1.5GB。我测试通过请求图 api 获取用户的所有字段,它的大小小于 12KB。所以10000个用户的json列表应该是120MB左右,不会超过1.5GB的最大内存。

但是你也需要注意几点:

1.当你请求图表api时,它一次只能响应999条记录。所以你需要多次请求图表api。

2.需要注意消费计划的超时限制。如果你为你的功能使用消费计划,默认超时应该是5分钟,你可以通过modify 属性 functionTimeout in host.json 将超时设置为最大10分钟(我认为10 分钟的超时时间足以满足您的要求)。