我正在创建一个民意调查应用程序。用户可以定义一个或多个投票问题并配置答案选项。 guest 可以加入 session ,当投票(问题)被激活时,开始投票。基本上标准民意调查是什么样子的。
为了处理传入的投票,我使用 Azure 服务总线。我有一个接受投票并向服务总线队列发送消息的端点。然后,具有服务总线队列触发器的 Azure 函数将使用该消息并将投票保留在存储库中的某个位置。
我的问题是我想要另一个“后台进程”,我想象另一个Azure函数,当投票进来时会触发它,去计算投票的累积,以便能够绘制饼图。
现在我希望尽可能有效地触发此函数。关键是它必须准确。我正在寻找的是一种在投票进来时触发计算一次的方法,但是当一堆投票进来时,我只想在最后一次投票保留后触发计算一次。我正在考虑引入一个新的队列来发送“计算命令”。我使用实时框架来更新饼图。我想经常发送饼图更新,但当短时间内出现大量选票时,不一定每秒发送数千次。
我正在寻找一种可以使用 SB 队列重复数据删除的解决方案,但我认为这种重复数据删除还会检查以前发送的消息。并且使用此解决方案并不能保证在处理完最后一次投票后进行计算,因为该消息可能会被识别为重复消息,从而被忽略。
另一个解决方案可能是为投票队列引入一个 SessionId,让我能够克服同时处理投票消息的问题,但这感觉像是使用服务总线的反模式。最后,当大量选票进来时,你希望事情像疯子一样扩展,所以出于这个原因,这次 session 对我来说是不可行的。
现在我已经没有想法了,是否有一种我忽略的机制,我可以利用它(例如)仅在没有类似消息等待处理时才将消息放入队列中(例如没有锁)或者什么?
最佳答案
您可以使用可用的 Event Grid events 之一来触发该功能对于服务总线,如果您担心您不希望监听器始终运行。
关于azure - 使用 Azure 服务总线通过 Azure Functions 处理大量投票并处理结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74121386/