我有2个服务之间的队列,我在这个队列中发送了两个模型的对象A
& B
。每个B
都可以拥有A
的外键。模型B
的对象已保存在消费者服务的数据库中,但A
的对象将在发件人服务中创建,然后发送给消费者以保存在他们的数据库中。
现在,当发件人创建A
并将B
之一的外键设置为它时,它会向此队列发送create
类型为A
的消息,通过类型为update
的{{1}}消息来指示应更新B
对象。当我们只有一个消费者,并保证按顺序收到消息时,我们没有问题;将创建B
对象并将其保存到使用者DB,并更新A
对象。但是当我们有同一个消费者的多个实例时,会出现问题:B
消息将被传递给一个消费者实例,A
消息将被传递给另一个实例。他们正在尝试同时工作,并且在B
对象保存到DB之前,第二个实例将尝试为其设置外键,而DB会阻止它。
我认为一种解决方案是在每个A
消息中发送A
s的所有信息,因此当实例尝试更新B
时,它可以创建B
} 通过它自己。问题是它将序列化A
对象所需的时间加倍
另一种解决方案是在收到B
消息的确认之前拒绝发送B
消息。但这会减慢我们的系统,并迫使它拯救它的状态。
我该怎么做才能解决这个问题?