RabbitMQ:忽略 prefetch() 会导致数据并发吗?
RabbitMQ: Does ignoring prefetch() causes data concurrency?
场景:
我只有一个生产者和消费者,只有一个传输消息的队列。消费者将根据消费它的消息更新数据库上的值。不应将任何操作并行发送到数据库。所以,我们不应该做任何导致数据库数据并发的事情。我使用 prefetch(1)
一次接收一条消息。删除 prefetch()
是否会导致多个操作并行发送到数据库?
消费者是否在没有prefetch()
的单线程处理器中处理消息?
是否prefetch
导致并行
如果不考虑single-threaded批量操作的情况,我们首先要知道是什么导致了并行?多线程消耗。
The prefetch value defines the max number of unacknowledged deliveries that are permitted on a channel or consumer.
所以预取只会影响消费者内存中存储了多少未确认的消息。这不涉及消费。
什么配置会导致并行
如果我们有一个通道,它有一个调度线程,因此所有传入的消息都是串行处理的。实现消费并行的一个明显方法是增加监听通道和消费者的数量。
rabbitmq客户端虽然有很多版本,但是都是按照AMPQ协议写的,所以区别不大。
场景:
我只有一个生产者和消费者,只有一个传输消息的队列。消费者将根据消费它的消息更新数据库上的值。不应将任何操作并行发送到数据库。所以,我们不应该做任何导致数据库数据并发的事情。我使用 prefetch(1)
一次接收一条消息。删除 prefetch()
是否会导致多个操作并行发送到数据库?
消费者是否在没有prefetch()
的单线程处理器中处理消息?
是否prefetch
导致并行
如果不考虑single-threaded批量操作的情况,我们首先要知道是什么导致了并行?多线程消耗。
The prefetch value defines the max number of unacknowledged deliveries that are permitted on a channel or consumer.
所以预取只会影响消费者内存中存储了多少未确认的消息。这不涉及消费。
什么配置会导致并行
如果我们有一个通道,它有一个调度线程,因此所有传入的消息都是串行处理的。实现消费并行的一个明显方法是增加监听通道和消费者的数量。
rabbitmq客户端虽然有很多版本,但是都是按照AMPQ协议写的,所以区别不大。