首页 > 解决方案 > rabbitmq 预取多个消费者

问题描述

我试图了解 rabbitmq 如何与多个消费者和prefetch_count.

我有三个消费者在同一个队列上消费,所有这些消费者都配置了 QoS prefetch_count = 200

现在假设在某个点我在队列中有无限的积压消息并且消费者A,B,C正在连接到队列,A会同时从队列中获得消息1-200,B获得201-400,C获得401-600吗?与其他消息相比,这似乎是 message 1,最先得到处理的。不知何故,我不希望这样,我希望按顺序处理这些消息。201401

如果是这种情况,我猜这意味着消息可能会根据消费者的设置方式进行无序处理,即使队列遵循 FIFO。

或者我应该设置 prefetch_count = 1 以确保 REAL FIFO?

编辑:

只需设置一个 rabbitmq 的本地环境并进行一些实验。我使用生产者依次轰炸编号为 0 到 100000 的队列,以在队列中累积积压消息。后来,我有两个消费者 A 和 B 使用 prefetch_count = 200 的队列中的消息。

根据我的观察,一开始A得到0-199,B得到200-399。但是,A 开始获得数字 {401, 403, 405, 406 ...},然后 B 获得 {400, 402, 404, ...}。

我猜 A 和 B 一开始收到未跳过的消息是因为我没有严格同时启动这两个消费者。但是下面的模式很好地解释了它是如何prefetch_count工作的。它不一定会向消费者发送连续的消息(我知道它是以循环方式处理的,但我想这对实验来说更直观)。如果使用prefetch_count.

标签: rabbitmq

解决方案


推荐阅读