rabbitmq - rabbitmq 预取多个消费者
问题描述
我试图了解 rabbitmq 如何与多个消费者和prefetch_count
.
我有三个消费者在同一个队列上消费,所有这些消费者都配置了 QoS prefetch_count = 200
。
现在假设在某个点我在队列中有无限的积压消息并且消费者A,B,C
正在连接到队列,A会同时从队列中获得消息1-200,B获得201-400,C获得401-600吗?与其他消息相比,这似乎是 message 1
,最先得到处理的。不知何故,我不希望这样,我希望按顺序处理这些消息。201
401
如果是这种情况,我猜这意味着消息可能会根据消费者的设置方式进行无序处理,即使队列遵循 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
.
解决方案
推荐阅读
- javascript - 如何从 url 参数触发材质 ui 选项卡
- solidity - 无法使用 ECDSA.recover 验证经过身份验证的消息
- sql-server - 无法连接到 localhost - 系统找不到指定的文件
- apache-spark - PySpark 无法通过 s3a 加载数据
- pyspark - 在某些列上为投票系统过滤火花数据帧的最佳 PySpark 实践是什么?
- java - 如何使用附加字段将 Protobuf 序列化为 JSON?
- vue.js - Vue 和 Json-server 托管在 Vercel 上
- ruby-on-rails - 查询 postgresql 视图时 Active Record 转换日期不一致
- alembic - 我在哪里可以在 Alembic 中声明自定义类型?
- javascript - 如何始终滚动到 TextArea 底部以显示 React 中的最新文本?