【问题标题】:Multiple durable functions in one function app一个功能应用程序中的多个持久功能
【发布时间】:2021-11-12 12:50:45
【问题描述】:

是否可以在一个函数应用中托管多个持久函数?我们如何为每个持久函数指定不同的任务中心名称?

【问题讨论】:

  • 是的,可以在一个函数应用中托管多个持久函数。是否需要为每个持久功能指定不同的任务中心?
  • 如果一个持久函数的负载比另一个函数更大,我假设较轻函数的性能可能会受到较重函数创建的历史行数的影响。同样对于故障排除,我认为单独浏览每个历史记录会更容易。我还没有找到为不同的编排器指定任务中心的方法
  • 我没用过这个,但可以尝试在DurableClient 属性中定义任务中心,例如 - [DurableClient(TaskHub = "%MyTaskHub%")]。其中%..% 表示在应用设置中寻找价值
  • 是的,我试过了,但它不起作用

标签: azure-functions azure-durable-functions


【解决方案1】:

不,不要尝试在同一个 Function App 中托管多个 Durable Function。在后台,Durable Functions 使用存储资源进行编排。这些存储队列和表会自动为您管理,它们存在于存储帐户中。到目前为止,一切都很简单。

如果多个持久函数要共享同一个存储帐户,则每个都需要自己的一组存储资源,因此运行时使用“任务中心名称”来确定要为每个持久函数使用哪些存储资源。

如果两个 Durable Functions 共享相同的存储资源,则会发生奇怪的事情,并且您的两个函数都将无法工作。运行时会看似随机地将触发事件路由到任一函数,从而使大多数编排处于挂起或运行状态并且永远不会完成。

任务中心名称的默认值基于函数应用的名称,但可以在 host.json 文件中覆盖

{
  "version": "2.0",
  "extensions": {
    "durableTask": {
      "hubName": "CustomTaskHubName"
    }
  }
}

问题是:一个函数应用程序只能配置一个任务中心名称,这意味着,每个持久函数都需要托管在自己的函数应用程序中,有自己的部署管道,可能还有自己的代码存储库等,具体取决于你的设置。

另外, DurableClient 属性上有一个 TaskHub 属性,这表明您可以在同一个应用程序中拥有多个任务中心名称。但是,文档在这方面尚不清楚,经过多次尝试后我无法使其工作。据我所知,这纯粹是为了将配置从 appsettings 中提取出来,以便更轻松地在开发、测试和生产环境之间更改任务中心名称。如果我在这方面错了,那就太好了。

【讨论】:

    【解决方案2】:

    补充丹尼尔戴森的回应:

    “如果多个函数应用共享一个存储帐户,则必须为每个函数应用配置一个单独的任务中心名称。一个存储帐户可以包含多个任务中心。此限制通常也适用于其他存储提供程序。”

    根据 Microsoft 文档,只要确保任务中心名称不同,就可以在单个函数应用中拥有多个持久函数。

    来源:https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-task-hubs?tabs=csharp

    【讨论】:

      猜你喜欢
      • 2022-10-18
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 2019-11-06
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      相关资源
      最近更新 更多