问题描述
场景:
我只有一个生产者和消费者,只有一个队列来传输消息。使用者将根据使用它的消息更新DB上的值。不应将任何操作并行发送到数据库。因此,我们不应该做任何导致数据库上数据并发的事情。我使用prefetch(1)
一次接收一封邮件。删除prefetch()
是否会使多个操作并行发送到数据库?
消费者是否在没有prefetch()
的单线程处理器中处理消息?
解决方法
prefetch
是否导致平行
如果不考虑单线程批处理操作的情况,那么我们首先需要知道导致并行化的原因是什么?多线程消耗。
prefetch值定义了渠道或消费者允许的未确认交付的最大数量。
因此,预取只会影响在用户内存中存储了多少未确认的消息。这不涉及消费。
什么配置将导致并行
如果我们只有一个通道,则它只有一个调度线程,因此所有传入消息都将按顺序处理。实现消费并行性的一个明显方法是增加收听渠道和消费者的数量。
尽管Rabbitmq的客户端版本很多,但它们都是根据AMPQ协议编写的,因此并没有太大的区别。