RabbitMQ:忽略 prefetch() 会导致数据并发吗?

Posted

技术标签:

【中文标题】RabbitMQ:忽略 prefetch() 会导致数据并发吗?【英文标题】:RabbitMQ: Does ignoring prefetch() causes data concurrency? 【发布时间】:2021-02-07 05:44:59 【问题描述】:

场景:

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

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

【问题讨论】:

如果没有更多关于如何编写消费者的详细信息,就无法回答这个问题:RabbitMQ 只是在被要求时传递消息,它无法控制接下来会发生什么。例如,如果它是一个 php 脚本,答案将是微不足道的,因为 PHP 没有本机线程;在其他语言中,这取决于您使用的库以及使用方式。 【参考方案1】:

prefetch 是否导致并行

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

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

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

什么配置会导致并行

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

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

【讨论】:

感谢您的明确答复。能否提供出处? @EmadMamaghani 感谢您的评论。关于什么的来源? 关于您提到的概念的文档。 @EmadMamaghani rabbitmq.com/api-guide.html#consuming, ***.com/questions/18531072/…, rabbitmq.com/consumer-prefetch.html

以上是关于RabbitMQ:忽略 prefetch() 会导致数据并发吗?的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMq qos prefetch 消息堵塞问题

rabbitMq实战使用

Django prefetch_related缓存不反映更改

SpringBoot 集成RabbitMQ

详解HTML5中rel属性的prefetch预加载功能使用

RabbitMQ第四课 多线程收发异常