如何处理具有多个使用者的消息队列中的已排序消息

时间:2015-11-04 11:04:55

标签: message-queue

我有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消息。但这会减慢我们的系统,并迫使它拯救它的状态。

我该怎么做才能解决这个问题?

0 个答案:

没有答案