gpt4 book ai didi

azure - 以队列为中心的工作模式的故障处理

转载 作者:行者123 更新时间:2023-12-03 05:06:25 24 4
gpt4 key购买 nike

我计划使用以队列为中心的设计,如here所述。对于我的一个应用程序。这本质上包括使用 Azure 队列,其中工作请求从 UI 排队。工作人员从队列中读取消息、处理消息并从队列中删除消息。

工作线程完成的“工作”是在一个事务内,因此如果工作线程在完成之前失败,则在重新启动时它会再次拾取相同的消息(因为它尚未从队列中删除)并尝试再次执行操作(最多重试次数)

要扩展我可以使用两种方法:

  1. 多个工作人员,每个工作人员都有一个单独的队列。因此,如果我有 5 个工作线程 W1 到 W5,则我有 5 个队列 Q1 到 Q5,并且每个工作线程都知道要从哪个队列读取,并且故障处理与一个队列和一个工作线程的情况类似
  2. 一个队列和多个工作线程。这里的失败/重试处理会更加复杂,并且最终可能会使用消息队列中的“隐形”时间来确保没有两个工作人员接受相同的作业。必须计算不可见时间,以确保其足以完成作业,但又不会太长以致于在很长一段时间后执行重试。

想知道第一种方法是否是正确的方法?上述第二种方法中处理失败的可靠方法是什么?

最佳答案

您最好采用方法 2 - 单个队列,但有多个工作线程。

这更好,因为:

  • 将消息传递到队列的进程只需要了解单个队列端点。这降低了最终的复杂性;
  • 扩展从队列中提取的工作线程数量现在与任何代码/配置更改无关 - 您可以更轻松地扩展和缩减(在运行时)

如果您担心可见性,您可以首先选择默认的时间跨度,然后如果工作线程看起来花费的时间太长,它可以定期调用 UpdateMessage()更新消息的可见性。

最后,如果您的工作线程超时并且无法完成消息的处理,其他工作线程将再次拾取该消息并重试。您还可以使用消息的 DequeueCount 属性来管理重试次数。

关于azure - 以队列为中心的工作模式的故障处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42429542/

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