RabbitMQ - Basic_qos 函数以及如何最大化它
RabbitMQ - Basic_qos function and how to maximize it
我一直在使用 RabbitMQ 构建分布式网络爬虫。
到目前为止,我一直在使用这个功能,以便每个人一次只能收到 1 个请求。
channel.basic_qos(prefetch_count=1)
据我了解,无论通道有多少个队列,它总是一次只处理 1 条消息。
有什么方法可以使一次处理的邮件数量最大化?我不想让这个 prefetch_count
静态化,而是在给定时间处理尽可能多的消息。
如果您不指定预取 (qos),则 RabbitMQ 将向您的消费者发送连接可以处理的尽可能多的消息。所以根本不要调用 basic_qos。
为了最大限度地提高连接的吞吐量,不要对每条消息发送确认,而是使用 basic_ack 和 multiple=true,并一次确认大量消息。
这是有风险的。如果您的连接中断,您将重新发送大量消息,如果您对 ack 进行批处理,您也会重新处理大量消息。但是,如果您的消费者是网络爬虫,那么最糟糕的情况就是它会爬取一个网站或页面两次,所以没什么大不了的。
我一直在使用 RabbitMQ 构建分布式网络爬虫。 到目前为止,我一直在使用这个功能,以便每个人一次只能收到 1 个请求。
channel.basic_qos(prefetch_count=1)
据我了解,无论通道有多少个队列,它总是一次只处理 1 条消息。
有什么方法可以使一次处理的邮件数量最大化?我不想让这个 prefetch_count
静态化,而是在给定时间处理尽可能多的消息。
如果您不指定预取 (qos),则 RabbitMQ 将向您的消费者发送连接可以处理的尽可能多的消息。所以根本不要调用 basic_qos。
为了最大限度地提高连接的吞吐量,不要对每条消息发送确认,而是使用 basic_ack 和 multiple=true,并一次确认大量消息。
这是有风险的。如果您的连接中断,您将重新发送大量消息,如果您对 ack 进行批处理,您也会重新处理大量消息。但是,如果您的消费者是网络爬虫,那么最糟糕的情况就是它会爬取一个网站或页面两次,所以没什么大不了的。