我有一个案例,其中有一个批量操作正在处理多个项目。处理完所有项目后,我必须将操作状态更新为已完成。项目由多个消费者并行处理。
理论上,处理项目后的消费者可以检查是否没有剩余项目(或此操作的队列中没有消息),但有可能两个消费者(A 和 B)同时完成,他们都检查同时,他们都看到另一个还没有准备好(因为事务还没有提交)——消费者 A 不会看到消费者 B 所做的更改,消费者 B 也不会看到消费者 A 所做的更改,所以没有他们会更新动作状态。我对吗?
如何在没有某种额外的定期检查状态且没有开销的情况下实现这种条件?如果每个操作有数千个项目,定期检查可能会很好,但如果通常有 1-2 个长期运行的项目,则效率非常低。
谢谢!
编辑:简而言之-在处理一组消息后触发某些操作的正确方法是什么,但是:
- 消息必须并行处理
- 定期检查是否所有消息都已处理不是答案