我有一个通过RabbitMQ发送消息的系统。消息包含订单ID。
接收系统在其数据库中查找订单ID是否存在。如果没有,则将其插入。如果是这样,那么它将对其进行更新。看起来像这样:
var doesOrderIdExistInDb = context.CheckIfOrderIdExists(order.OrderId);
if (doesOrderIdExistInDb)
{
UpdateOrder(order);
} else
{
InsertOrder(order);
}
我遇到的问题是,对于一个订单ID,我可以连续接收多条消息。
当这些消息在使用者之间分割时,它们都同时执行上述检查和代码。意思是他们都检查订单ID是否存在(不存在),然后他们都尝试插入订单(除了一个失败之外,其他都失败)。
我需要某种方式来获取所有消息,以便订单ID发送给单个消费者。
如果有某种方法可以选择消费者,这将很容易。 (我可以使用工人的数量对订单ID进行取模运算。由于订单ID是顺序的,因此它将在消费者之间正常分配。)
我要避免的是必须创建一个新队列以发送给每个消费者。我的消费者应该有弹性(随着我的负担增加,人数也在增加)。
是否可以将我所有的订单ID发送给同一个消费者?(除了为每个消费者创建新的队列)。
答案 0 :(得分:0)
队列中的消息由下一个可用使用者使用。 RabbitMQ服务器无法根据您的想法决定不将下一条消息传递给下一个可用的使用者。
但是,消费者可以决定哪些邮件路由到他们接受和拒绝。
其他数据以完成此工作:
如果有邮件发送给消费者,他将按照以下步骤操作:
这将确保一旦某个消费者开始处理订单的第一条消息,其他任何消费者都将不会处理该订单的消息。