Red de conocimiento informático - Problemas con los teléfonos móviles - La consola de administración RabbitMQ elimina el riesgo de grandes colas de acumulación de mensajes

La consola de administración RabbitMQ elimina el riesgo de grandes colas de acumulación de mensajes

Cuando RMQ Online Cluster (v3.6.12) borra una cola con una gran cantidad de mensajes apilados (100 W), el cliente puede informar una gran cantidad de excepciones de tiempo de espera de envío.

Operación de purga (rabbit_amqqueue_process .erl):

handle_call(purge, _From, State = #q{backing_queue = BQ,

backing_queue_state = BQS}) -gt; p> p>

{Count, BQS1} = BQ: purge(BQS),

...

BQ tiene por defecto el módulo Rabbit_variable_queue:

msg_store_remove( MSCState, IsPersistent, MsgIds) -gt;

with_immutable_msg_ store_state(

MSCState, IsPersistent,

divertido (MCSState1) -gt;

Rabbit_msg_store: eliminar(MsgIds, MCSState1)

fin).

Esa es la operación de limpieza, que en última instancia la realiza el proceso Rabbit_msg_store.

Solo hay un proceso Rabbit_msg_store por nodo, lo que fácilmente puede convertirse en un cuello de botella.

La comunicación entre procesos Rabbitmq utiliza el mecanismo credit_flow, es decir, los mensajes persistentes se envían a la cola persistente de la siguiente manera general:

Rabbit_reader → Rabbit_channel → Rabbit_amqqueue_process → Rabbit_msg_store

Cuando Cuando el proceso Rabbit_msg_store está ocupado procesando una gran cantidad de operaciones de borrado de mensajes, no puede procesar mensajes de su Rabbit_amqqueue_process ascendente de manera oportuna, lo que hará que los créditos de su Rabbit_amqqueue_process ascendente se agoten rápidamente. Del mismo modo,

Cuando el proceso Rabbit_amqqueue_process está bloqueado en el proceso, no puede procesar mensajes de su Rabbit_channel ascendente de manera oportuna, lo que hará que Rabbit_Channel agote rápidamente su límite de crédito, lo que también provocará que el proceso falle. .

En este momento, los mensajes enviados por el cliente se retrasarán (mostrarán excepciones, como esperar el tiempo de espera de confirmación).

Por lo tanto, para los clústeres RMQ con una gran cantidad de mensajes en el líneas que necesitan ser limpiadas, es mejor no simplemente limpiarlas ya que esto puede tener un impacto en la línea. Esto puede tener un impacto en los negocios en línea.

La forma más segura de limpiar es comenzar a consumir consumidores (recibir y descartar)

El indicador TcpExt.prune del nodo del clúster de negocios en línea llama a la alarma y al mismo tiempo se descubre que hay una cola en el estado del flujo, y luego se realiza el juicio Hubo un cuello de botella en el proceso de persistencia Rabbit_msg_store, que se descubrió a través de la herramienta sar

Finalmente se determinó que había un problema con el IO subyacente en el host correspondiente al nodo, y se eludió a tiempo.

Encontrar cuellos de botella con RabbitMQ 3.3

Limpiar colas grandes es lento