我打算使用我的应用程序中描述的here所描述的以队列为中心的设计。这基本上包括使用Azure队列,其中工作请求从UI排队。工作人员从队列中读取,处理并从队列中删除消息。以队列为中心的工作模式的失败处理
工作人员完成的'工作'在一个事务中,所以如果工人在完成之前失败,在重新启动时它会再次拾取相同的消息(因为它没有从队列中删除)并尝试执行操作再次(最多重试的最大数量)
要缩放我可以使用两种方法:
- 多位工人每一个单独的队列。所以如果我有五个工人W1到W5,我有五个队列Q1到Q5,每个工人知道从哪个队列读取,并且故障处理与一个队列和一个工人的情况相似
- 一个队列和多个工人 。这里的失败/重试处理会涉及更多,最终可能会在消息队列中使用“隐形”时间,以确保没有两名工作人员选择相同的工作。必须计算不可见时间,以确保其足以完成工作,但又不足以在很长一段时间后执行重试。
想知道第一种方法是否是正确的方法吗?上述第二种方法处理失败的强大方法是什么?