En primer lugar, tenemos 100 mensajes sin procesar en nuestro servidor rabbitmq, abrimos un cliente de consumo al azar y aparecerá la siguiente situación,
100 piezas de datos, todas enviadas al instante, pero no podemos procesar tantos datos a la vez con un solo cliente, ¿qué deberíamos hacer?
Como se muestra en la imagen de arriba, ¡no confirmamos la recepción del mensaje! Si el productor sigue enviándolo, nosotros los consumidores seguiremos recibiéndolo.
Imagina que, un consumidor individual, puede procesar hasta 60 mensajes en 1 minuto, sin embargo, un productor puede enviar 300 mensajes en 1 minuto, si,Tenemos un cliente consumidor que necesita recibir 300 mensajes a la vez en 1 minuto, lo que ha superado nuestra carga máxima, lo que puede hacer que los recursos del servidor se agoten y el cliente consumidor se quede atascado。
RabbitMQ ofrece una función de calidad de servicio (qoS), es decir, bajo la premisa de confirmación no automática de mensajes, si un cierto número de mensajes (estableciendo el valor de QoS basado en consume o channel) no se confirma, no se consumirán nuevos mensajes.
prefetchSize:0 prefetchCount: Indica a RabbitMQ que no envíe más de N mensajes a un consumidor al mismo tiempo, es decir, una vez que haya N mensajes que aún no hayan sido ackados, el consumidor bloqueará hasta que haya un mensaje ack global:true\false Ya sea que los ajustes anteriores se apliquen a canales, para decirlo simplemente, si las restricciones anteriores son a nivel de canal o a nivel de consumidor
Nota: Se dice que prefetchSize y global no están implementados por rabbitmq, así que no los estudiaré por el momento
prefetch_count entra en vigor cuando no_ask=falso,Es decir, en el caso de la respuesta automática, estos dos valores sonNo está en efectode
Establece prefetchCount = 3 mediante el método BasicQos. Esto permite a RabbitMQ procesar hasta 3 mensajes por consumidor al mismo tiempo. En otras palabras, no distribuirá nuevos Mensajes al consumidor hasta que reciba el ack. Así es como configurarlo:
Como puedes ver en la figura, hay dos consumidores escuchando Queue al mismo tiempo, pero ten en cuenta que el mensaje aquí solo se aceptará automáticamente si uno de los consumidores lo consume, y el otro no recibirá este mensaje de nuevo.
Introducción a la página web oficial: http://www.rabbitmq.com/consumer-prefetch.html
Ten en cuenta que este método puede hacer que la cola esté llena. Por supuesto, puede que necesites añadir más Consumidores o crear más virtualHosts para perfeccionar tu diseño.
|