使用 pubsub 架构解决竞争问题的最佳实践
Best practice of solving race issue with pubsub architecture
假设我有这个微服务架构,它们都使用 pubsub 进行交互。
基本上,如果卖车了,就会做task 1,然后做task 2a & 2b,如果有真皮座椅,就做task 3。
请注意,任务 2a 和 2b 同时发生,因为它是 pubsub
理论上,这非常有效,但在实践中,我发现在执行 2a 之前执行任务 2b 和 3 的情况。这会导致任务 3 出错,因为 CAR 123 尚未从任务 2a 生成。
我正在考虑在执行任务 2b 时添加延迟,但我想知道是否有解决此类问题的“更标准”方法?
(不,我们不能将任务 3 更改为 upsert 命令)
要使其按照您的意愿运行,您可以将销售和皮革座椅服务发布到同一主题。
如果主题只有一个分区,则销售消息将始终在 Seat Service 生成的消息之前。
如果主题有多个分区,设置相同的值(某种ID,最好是uuid,不创建热分区)作为两个消息的分区键,这样两个消息可以在同一个分区上产生并且仍然保持你需要的顺序。
假设我有这个微服务架构,它们都使用 pubsub 进行交互。
基本上,如果卖车了,就会做task 1,然后做task 2a & 2b,如果有真皮座椅,就做task 3。 请注意,任务 2a 和 2b 同时发生,因为它是 pubsub
理论上,这非常有效,但在实践中,我发现在执行 2a 之前执行任务 2b 和 3 的情况。这会导致任务 3 出错,因为 CAR 123 尚未从任务 2a 生成。
我正在考虑在执行任务 2b 时添加延迟,但我想知道是否有解决此类问题的“更标准”方法?
(不,我们不能将任务 3 更改为 upsert 命令)
要使其按照您的意愿运行,您可以将销售和皮革座椅服务发布到同一主题。
如果主题只有一个分区,则销售消息将始终在 Seat Service 生成的消息之前。
如果主题有多个分区,设置相同的值(某种ID,最好是uuid,不创建热分区)作为两个消息的分区键,这样两个消息可以在同一个分区上产生并且仍然保持你需要的顺序。