首页 > 解决方案 > RabbitMQ:忽略 prefetch() 会导致数据并发吗?

问题描述

场景:

我有一个生产者和消费者,只有一个传输消息的队列。消费者将根据已消费它的消息更新 DB 上的值。不应将任何操作并行发送到数据库。所以,我们不应该做任何导致数据库数据并发的事情。我prefetch(1)习惯一次接收一条消息。删除是否prefetch()会导致多个操作并行发送到数据库?

消费者是否在单线程处理器中处理消息prefetch()

标签: rabbitmqmessage-queuemessagebroker

解决方案


是否prefetch导致并行

如果不考虑单线程批量操作的情况,我们首先要知道是什么导致了并行?多线程消耗。

预取值定义了通道或消费者允许的未确认交付的最大数量。

所以预取只影响消费者内存中存储了多少未确认的消息。这不涉及消费。

什么配置会导致并行

如果我们只有一个通道,它就有一个调度线程,因此所有传入的消息都是串行处理的。实现消费并行的一个明显方法是增加收听渠道和消费者的数量。

rabbitmq客户端虽然有很多版本,但是都是按照AMPQ协议编写的,所以差别不大。


推荐阅读