我一直在使用RabbitMQ构建分布式网络爬虫。 到目前为止,我一直在使用这个函数,因此每个函数一次只能获得1个请求。
channel.basic_qos(prefetch_count=1)
根据我的理解,无论频道有多少队列,它一次只能处理1条消息。
有没有办法可以最大限度地增加一次处理的邮件数量?我不想让这个prefetch_count
静态,而是在给定时间处理尽可能多的消息。
答案 0 :(得分:0)
如果您没有指定预取(qos),那么RabbitMQ将向您的消费者发送连接可以处理的消息。所以根本不要打电话给basic_qos。
要最大化连接的吞吐量,请不要为每条消息发送确认,而是使用带有multiple = true的basic_ack,并一次确认大批消息。
这带来了风险。如果您的连接中断,您将重新传递大量消息,如果您批量处理,您也将重新处理大量消息。但是,如果您的消费者是网络抓取工具,那么可能发生的最糟糕的情况是它会抓取网站或网页两次,所以没什么大不了的。