Azure 中计时器的最佳选项

问题描述 投票:0回答:1

我们需要为每个请求创建一个计时器。

它将基于Azure PaaS。

基本上,我们有一个接收请求的函数,每个请求都包含一个唯一的标识符及其系统状态。

假设我们有系统进程状态 A - B - C 和 D。

请求从 A 移动到 D 需要 2 分钟。

我们希望确保请求不会停留在 A - D 之间。

当函数应用程序收到请求的状态 A 时,我们需要创建一个 3 分钟的计时器,如果 D 状态在 3 分钟内没有到达函数应用程序以获取相同的唯一标识符,则计时器将被触发然后向某人发送警报。

现在如果 D 状态在 3 分钟内到达,我们就终止计时器。

我们每天会收到大约 50,000 个独特请求。所以我们需要创建计时器并终止计时器,否则计时器就会被触发。

如何在 Azure 中最好地实现这一目标?

我们想到的第一个选项是函数应用计时器。

我们认为的第二个选项是EventGrid超时(死信)。但此选项的一个问题似乎无法杀死 EventGrid 中的消息,除非当 EventGrid 将消息发送到死信队列时,我们拦截并忽略。

请问大家有什么想法吗?

并发性和可扩展性也是此需求的重要方面。

提前谢谢您,

azure architecture azure-functions azure-eventgrid
1个回答
0
投票

我想你可能想研究一下持久功能 https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-overview?tabs=in-process%2Cnodejs-v3%2Cv1-model&pivots=csharp

您要么链接您的函数,要么只是等待事件(状态反馈),如果事件没有到达,则进入超时状态。可以看起来像这样:

context.WaitForExternalEvent<bool>("FuncAProcessCompleted", timespan.FromMinutes(3));
https://learn.microsoft.com/en-us/azure/azure-functions/durable/durable-functions-external-events?tabs=csharp

如果你不想适配持久化,看看定时消息 https://learn.microsoft.com/en-us/azure/service-bus-messaging/message-sequencing#scheduled-messages

基本上,您可以安排一条消息,然后在状态到达时取消它。如果没有到达,消息将被激活,您可以使用另一个功能对其做出反应。

© www.soinside.com 2019 - 2024. All rights reserved.