问题标签 [azure-durable-functions]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
528 浏览

c# - 带有 ActivityTrigger 的函数的响应绑定

我想创建一个调用活动函数的持久函数,然后在 v2 函数应用程序中使用 dotnet 核心返回一个值。该函数当然会验证其输入,因此可能会返回成功的值,也可能会返回无效的错误:HTTP 术语中的 200 或 400。我的活动功能将是这样的:

我应该为此使用什么返回类型?应该让我自己的 DTO 成为有效响应,还是有办法将 HttpResponse 对象返回到协调器?

0 投票
1 回答
1113 浏览

azure - Azure EventHub 和持久函数

从字面上看,尝试做一些我不擅长的事情。

我在这里阅读了持久功能概述 - https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview

有一个关于使用绑定在事件中心触发器上使用它的主题,但没有真正的工作示例,我按照那里的内容并在我的function.json中提出了这个绑定,

我的全部代码如下,

如果我使用该功能发送消息,我无法在我的testouthub事件中心看到它。不太确定这个 Durable 函数和 EventHub Trigger 是如何协同工作的。

0 投票
1 回答
132 浏览

c# - 如何确保具有相同 Person Id 的消息以单例方式执行,而不同的消息以并行方式执行?

我有一个azure function我想在其中处理多条消息的消息,parallel但是以相同的方式Person Id执行消息singleton

场景 1: 我有n许多消息,每条消息都具有相同的Person Id. 每条消息都需要按照它们到达的顺序执行,但要以某种singleton方式执行。

场景 2: 我有n很多消息。其中一些有Person Id:1。其中一些有Person Id:2。可以执行具有不同 Person Id 的parallel消息,但具有相同的消息Person Id需要按照它们到达的顺序和singleton方式执行。

我怎样才能做到这一点?

编辑: 我的应用程序正在运行Consumption Plan,因此,我无法预测我的应用程序将如何以及何时扩展。azure 函数最初会在所有分区上获取租约。看来,当应用程序未扩展时,Azure 函数最初会在所有分区上获得租约。@juunas 在评论中建议的解决方案让我担心,我的应用程序永远不会扩展,并且可能最终通过一个 azure 函数实例顺序运行批处理,因为我的函数不会持续接收数百万个数据点。下缩放的启发式方法Consumption Plan是未知的。

也许,以某种方式将有序保证中的事件中心与持久功能并行模式结合起来?

编辑2:

考虑两个函数:

  1. Appendercache功能:通过附加人员 ID 以及任何其他必需属性来维护有序列表。不一定是天蓝色的功能。
  2. Processor功能:使用持久函数单例模式(也可以存储正在处理的Person Id信息cache

流动:

  1. Appender,在附加之后,向 a 发送一条消息,queue其中只包含Person Id消息中的 。将Person Id按照文档instance id中的说明使用。
  2. Processor,如果该函数的实例尚不存在,将开始执行Person Id缓存中的特定消息。
  3. 如果 的实例Processor已经存在,则该消息将被忽略。

问题:

一种场景,其中Processor已完全清空缓存的Person Id有序消息,但在退出之前并行Appender附加另一条消息,Processor因此不执行新消息。现在,缓存将包含 1 条未处理的消息,并且不会调用 azure 函数来处理它,直到Appender附加另一条相同的消息Person Id

也许,我应该Durable Function Monitor以某种方式使用模式?

编辑 3: 我考虑的另一种方法是使用 Monitor 模式。instance id如果正在执行具有特定功能的函数,则不会忽略消息,而是会间隔等待。队列消息本身将Person Id与其他属性一起按顺序排列在cache. 这将确保每条消息都以正确的顺序执行(通过使用 中维护的列表cache)。但是,当将监视器方法与队列一起使用时,可能会出现单例示例中提到的以下问题:

此示例中存在潜在的竞争条件。如果 HttpStartSingle 的两个实例同时执行,则两个函数调用都会报告成功,但实际上只有一个编排实例会启动。根据您的要求,这可能会产生不良的副作用。因此,重要的是要确保没有两个请求可以同时执行此触发函数。

我考虑的另一种方法是使用 Monitor 模式,通过将Edit 2 Appender方法与使用实例 id 的单例模式相结合,每个函数只执行一条消息。

0 投票
1 回答
440 浏览

c# - Azure 函数 - 持久函数,SetCustomStatus 未更新

我基于“异步 HTTP API”模式中的 Microsoft 示例创建了一个持久函数。

在我的代码流中,我希望在不使用“await contextReq.CallActivityAsync”的情况下更新“SetCustomStatus”。

可能吗?因为我的持久功能保持在“待定”状态,并且“customStatus”没有得到更新。

一些代码片段:

0 投票
1 回答
963 浏览

azure - 使用持久函数中的重试选项,最后一次尝试后会发生什么?

我正在使用一个从队列中触发的持久函数。我正在将队列中的消息发送到一个非常不稳定的服务,所以我设置了 RetryPolicy。即使如此,即使最大重试次数已经用尽,我也希望能够看到失败的消息。

我是否需要手动将它们扔到死信队列中(如果是这样,我不清楚我如何知道消息何时重试了任意次数),或者该函数是否会自然地将它们扔到某种死信队列中- 信件/毒药队列?

0 投票
1 回答
741 浏览

c# - 如何从活动函数中获取 ILogger?

我在未来项目的原型中使用了 Durable Azure Function。

基本上,我有一个由启动 Orchestrator 的 HTTPPOST请求触发的客户端 Azure 函数。然后,Orchestrator 决定触发一个 Activity。没什么复杂的。

这是我正在做的一个示例:

Orchestrator 和 Client Functions 都被赋予了一个ILogger但不是 Activity 函数;如文档中所述特定参数或实例),Activity 函数仅获取一个参数。而且我不认为声明这些方法的静态类可以保留对它的引用。DurableActivityContextILogger

我知道活动函数应该执行一项小工作,但如果我能够记录如果出现问题时使用适当的值调用了活动(它会:)),我会更舒服。

问题

Activity 如何访问ILogger

0 投票
2 回答
1323 浏览

azure - 没有 HttpTrigger 的 Azure 持久函数调用(自动启动)

我正在查看此示例以在设置超时后运行持久函数 Activity 。

https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-eternal-orchestrations

这将允许我的函数活动执行数据处理,然后等待 1 小时再尝试再次加载。这将永远持续运行。完美的。

但是,将函数发布到 Azure 时,我不想通过关联的 HTTP 触发器手动调用/启动函数。我只希望持久功能自动启动并开始处理。

这可能吗?如果没有,建议的解决方法是什么?

谢谢!

0 投票
2 回答
555 浏览

c# - DurableOrchestrationClient.GetStatusAsync() 返回具有相同实例 ID 的实例即使在完成后仍在执行

我正在使用durable function singleton patternon consumption plan。我只想为队列消息中的相同 ID 执行该函数的一个实例。

我正在local环境中测试我的代码。尽管函数成功完成,但 DurableOrchestrationClient.GetStatusAsync() 返回具有相同实例 ID 的实例仍在执行。

使用Storage Explorer,我发现我的函数行Table>DurableFunctionHubInstances RuntimeStatus也被标记为Completed

为什么DurableOrchestrationClient.GetStatusAsync()报告存在具有相同 Instance Id 的实例?我怎样才能解决这个问题?

0 投票
2 回答
1675 浏览

c# - 持久函数可以有多个触发器吗?

我有一个由 Timer Trigger 每天触发一次的持久功能:

这工作正常。出于测试目的,我还希望能够通过 Http Trigger 触发持久功能,所以我添加了这个:

在本地运行这些,包括 http 触发器或 timer 触发器都会触发该函数,但在类中同时包含这两者意味着两个触发器事件都不会发生。是否可以让多个触发器类型启动一个编排触发器?

0 投票
1 回答
522 浏览

c# - 单元测试活动功能时,IBinder 的模拟失败

我正在尝试测试具有以下定义的活动功能:

IBinder我将单元测试中的模拟为:

测试成功调用活动,但结果binder.BindAsync始终为null

我错过了什么吗?