我们需要为每个请求创建一个计时器。
它将基于Azure PaaS。
基本上,我们有一个接收请求的函数,每个请求都包含一个唯一的标识符及其系统状态。
假设我们有系统进程状态 A - B - C 和 D。
请求从 A 移动到 D 需要 2 分钟。
我们希望确保请求不会停留在 A - D 之间。
当函数应用程序收到请求的状态 A 时,我们需要创建一个 3 分钟的计时器,如果 D 状态在 3 分钟内没有到达函数应用程序以获取相同的唯一标识符,则计时器将被触发然后向某人发送警报。
现在如果 D 状态在 3 分钟内到达,我们就终止计时器。
我们每天会收到大约 50,000 个独特请求。所以我们需要创建计时器并终止计时器,否则计时器就会被触发。
如何在 Azure 中最好地实现这一目标?
我们想到的第一个选项是函数应用计时器。
我们认为的第二个选项是EventGrid超时(死信)。但此选项的一个问题似乎无法杀死 EventGrid 中的消息,除非当 EventGrid 将消息发送到死信队列时,我们拦截并忽略。
请问大家有什么想法吗?
并发性和可扩展性也是此需求的重要方面。
提前谢谢您,
您要么链接您的函数,要么只是等待事件(状态反馈),如果事件没有到达,则进入超时状态。可以看起来像这样:
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
基本上,您可以安排一条消息,然后在状态到达时取消它。如果没有到达,消息将被激活,您可以使用另一个功能对其做出反应。