我是事件采购概念的新手,所以有一些我不明白的时刻。其中之一是如何处理以下情况:
我有2个服务实例。他们俩都收听事件队列。有两条消息:CreateUser和UpdateUser。第一个实例选择CreateUser,第二个实例选择UpdateUser。出于某种原因,第二个实例将更快地处理其命令,但由于未创建,因此没有用户要更新。
我在这里怎么了?
答案 0 :(得分:1)
我在这里怎么了?
评论:Race Conditions Don't Exist
微妙的时间差异不应改变核心业务行为。
换句话说,您想要的是逻辑,这样消息的顺序不会更改最终结果,并且第一个编写者赢得了策略(也称为比较和交换),因此当您有两个尝试执行的进程时要更新相同的资源,数据竞争的失败者必须重新开始。
作为一般规则,应该将事件理解为支持多个观察者-所有订阅者都可以查看所有事件。因此,除非您试图在多个进程中分配特定的订户,否则与竞争的消费者进行排队不是通常的方法。
答案 1 :(得分:-1)
您没有可以解决的并发问题。这完全可以归结为要么使用错误的工具,要么不阅读文档。
他们两个都听事件队列。
该队列应支持这一点。例如,天青队列,我可以在其中收听并告诉队列X秒钟不向其他任何人显示事件(这足以让我决定是否处理该事件)。如果我不回答->在该时间之后重新插入事件。如果我先杀死它,那就没有并发了。
因此,您需要一个可以处理此问题的后端队列。