问题标签 [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.
c# - 带有 ActivityTrigger 的函数的响应绑定
我想创建一个调用活动函数的持久函数,然后在 v2 函数应用程序中使用 dotnet 核心返回一个值。该函数当然会验证其输入,因此可能会返回成功的值,也可能会返回无效的错误:HTTP 术语中的 200 或 400。我的活动功能将是这样的:
我应该为此使用什么返回类型?应该让我自己的 DTO 成为有效响应,还是有办法将 HttpResponse 对象返回到协调器?
azure - Azure EventHub 和持久函数
从字面上看,尝试做一些我不擅长的事情。
我在这里阅读了持久功能概述 - https://docs.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview。
有一个关于使用绑定在事件中心触发器上使用它的主题,但没有真正的工作示例,我按照那里的内容并在我的function.json中提出了这个绑定,
我的全部代码如下,
如果我使用该功能发送消息,我无法在我的testouthub事件中心看到它。不太确定这个 Durable 函数和 EventHub Trigger 是如何协同工作的。
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:
考虑两个函数:
Appender
cache
功能:通过附加人员 ID 以及任何其他必需属性来维护有序列表。不一定是天蓝色的功能。Processor
功能:使用持久函数单例模式(也可以存储正在处理的Person Id信息cache
)
流动:
Appender
,在附加之后,向 a 发送一条消息,queue
其中只包含Person Id
消息中的 。将Person Id
按照文档instance id
中的说明使用。Processor
,如果该函数的实例尚不存在,将开始执行Person Id
缓存中的特定消息。- 如果 的实例
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 的单例模式相结合,每个函数只执行一条消息。
c# - Azure 函数 - 持久函数,SetCustomStatus 未更新
我基于“异步 HTTP API”模式中的 Microsoft 示例创建了一个持久函数。
在我的代码流中,我希望在不使用“await contextReq.CallActivityAsync”的情况下更新“SetCustomStatus”。
可能吗?因为我的持久功能保持在“待定”状态,并且“customStatus”没有得到更新。
一些代码片段:
azure - 使用持久函数中的重试选项,最后一次尝试后会发生什么?
我正在使用一个从队列中触发的持久函数。我正在将队列中的消息发送到一个非常不稳定的服务,所以我设置了 RetryPolicy。即使如此,即使最大重试次数已经用尽,我也希望能够看到失败的消息。
我是否需要手动将它们扔到死信队列中(如果是这样,我不清楚我如何知道消息何时重试了任意次数),或者该函数是否会自然地将它们扔到某种死信队列中- 信件/毒药队列?
c# - 如何从活动函数中获取 ILogger?
我在未来项目的原型中使用了 Durable Azure Function。
基本上,我有一个由启动 Orchestrator 的 HTTPPOST
请求触发的客户端 Azure 函数。然后,Orchestrator 决定触发一个 Activity。没什么复杂的。
这是我正在做的一个示例:
Orchestrator 和 Client Functions 都被赋予了一个ILogger
但不是 Activity 函数;如文档中所述(特定参数或实例),Activity 函数仅获取一个参数。而且我不认为声明这些方法的静态类可以保留对它的引用。DurableActivityContext
ILogger
我知道活动函数应该执行一项小工作,但如果我能够记录如果出现问题时使用适当的值调用了活动(它会:)),我会更舒服。
问题
Activity 如何访问ILogger
?
azure - 没有 HttpTrigger 的 Azure 持久函数调用(自动启动)
我正在查看此示例以在设置超时后运行持久函数 Activity 。
这将允许我的函数活动执行数据处理,然后等待 1 小时再尝试再次加载。这将永远持续运行。完美的。
但是,将函数发布到 Azure 时,我不想通过关联的 HTTP 触发器手动调用/启动函数。我只希望持久功能自动启动并开始处理。
这可能吗?如果没有,建议的解决方法是什么?
谢谢!
c# - DurableOrchestrationClient.GetStatusAsync() 返回具有相同实例 ID 的实例即使在完成后仍在执行
我正在使用durable function
singleton pattern
on consumption plan
。我只想为队列消息中的相同 ID 执行该函数的一个实例。
我正在local
环境中测试我的代码。尽管函数成功完成,但 DurableOrchestrationClient.GetStatusAsync() 返回具有相同实例 ID 的实例仍在执行。
使用Storage Explorer
,我发现我的函数行Table>DurableFunctionHubInstances
RuntimeStatus
也被标记为Completed
。
为什么DurableOrchestrationClient.GetStatusAsync()
报告存在具有相同 Instance Id 的实例?我怎样才能解决这个问题?
c# - 持久函数可以有多个触发器吗?
我有一个由 Timer Trigger 每天触发一次的持久功能:
这工作正常。出于测试目的,我还希望能够通过 Http Trigger 触发持久功能,所以我添加了这个:
在本地运行这些,包括 http 触发器或 timer 触发器都会触发该函数,但在类中同时包含这两者意味着两个触发器事件都不会发生。是否可以让多个触发器类型启动一个编排触发器?
c# - 单元测试活动功能时,IBinder 的模拟失败
我正在尝试测试具有以下定义的活动功能:
IBinder
我将单元测试中的模拟为:
测试成功调用活动,但结果binder.BindAsync
始终为null。
我错过了什么吗?