gpt4 book ai didi

c# - Azure 函数针对同一服务总线队列消息多次运行

转载 作者:行者123 更新时间:2023-12-03 04:42:56 26 4
gpt4 key购买 nike

我有一个 Azure 函数(基于新的 C# 函数而不是旧的 .csx 函数),每当消息进入 Azure 服务总线队列时就会触发该函数。一旦该函数被触发,它就开始处理服务总线消息。它对消息进行解码、读取大量数据库、更新大量其他数据库等等……这有时可能需要 30 分钟以上。

因为,这不是一个时间敏感的过程,30 分钟甚至 60 分钟都不是问题。问题是,与此同时,Azure Function 似乎再次启动并一次又一次地获取相同的消息并重新处理它。这是一个问题,会导致我们的业务逻辑出现问题。

那么,问题是,我们能否强制Azure函数以单例模式运行?或者如果这是不可能的,我们如何更改轮询间隔?

最佳答案

AutoRenewTimeout 并不像建议的那么好。它有一个您需要注意的缺点。这是not a guaranteed operation 。作为客户端发起的操作,它可能并且有时失败,使您处于与今天相同的状态。

要解决这个问题,您可以做的是检查您的设计。如果您有一个长时间运行的进程,那么您将处理该消息,并将处理交给运行时间超过 MaxLockDuration 的进程。您的函数花费如此长的时间这一事实表明您有一个长时间运行的进程。消息传递不是为此而设计的。

潜在的解决方案之一是获取消息,在存储表中注册处理意图。让另一个存储表触发函数来启动可能需要 X 分钟的处理。将其标记为单例。通过这样做,您将并行处理消息,将“长时间运行处理的请求”写入存储表,完成服务总线消息传递,因此不会触发其重新处理。通过长时间运行的处理,您可以决定如何处理失败案例。

希望有帮助。

关于c# - Azure 函数针对同一服务总线队列消息多次运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45045535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com