Red de conocimiento informático - Problemas con los teléfonos móviles - Estado del mensaje RabbitMQ

Estado del mensaje RabbitMQ

La ubicación del mensaje: el mensaje se almacena en la memoria o en el disco

El mensaje está indexado y la ubicación del índice está en la memoria o en el disco

En la memoria; y en el disco pueden estar ambos al mismo tiempo. Existe un mensaje o índice.

Estas situaciones dependen del tipo de cola.

En Rabbit, los mensajes en la cola se pueden procesar en los siguientes cuatro estados:

alfa: el contenido del mensaje y la posición del mensaje en la cola (índice de mensajes) son ambos guardado en la memoria;

beta: el contenido del mensaje solo está en el disco y el índice del mensaje solo está en la memoria;

gamma: el contenido del mensaje solo está en el disco y el mensaje el índice está en la memoria y el disco;

p>

delta: tanto el contenido del mensaje como el índice están en el disco.

-- Para mensajes persistentes, tanto el contenido del mensaje como el índice del mensaje deben estar en el disco antes de estar en uno de los estados anteriores. Es decir, el atributo es Durable.

El cambio de ubicación del mensaje se implementa a través del flujo de estado para lograr un equilibrio razonable en el tiempo y el espacio.

En términos de memoria y CPU, esto significa cumplir con diferentes requisitos de memoria y CPU.

alfa es el que consume más memoria, pero debido a que se almacena directamente en la memoria, consume muy poca CPU;

delta básicamente no consume memoria, pero tiene un alto impacto en la CPU. y el consumo de E/S del disco es grande (delta requiere dos operaciones de E/S, una para leer el índice y otra para leer el contenido del mensaje, por lo que el mensaje se consumirá lo antes posible después de su envío;

beta y gamma solo requieren una operación de E/S para leer el contenido del mensaje).

gamma se trata más de conservar el estado de la información tal como aparece.

En la estructura del estado vqstate de la cola (ver [$RABBIT_SRC/src/rabbit_variable_queue.erl]), hay cinco colas, a saber, q1, q2, delta, q3 y q4 (q1~q4 usan el módulo de cola Erlang , y la estructura de almacenamiento delta depende de la implementación del índice de mensajes), donde q1 y q4 solo contienen mensajes en el estado alfa, q2 y q3 solo contienen mensajes en los estados beta y gamma, y ​​delta contiene mensajes en el estado delta.

En términos generales, los mensajes pasan por una transición de estado en el orden de q1-gt; q2-gt; delta-gt; q3-gt; q4: ingresan a la cola en estado alfa y se almacenan en la memoria (q1). o q4), y luego descubre que no hay memoria en algún momento y pasa al estado beta (q2, q3) (en realidad, hay dos transiciones q1-gt; q2, q4-gt; q3), si la memoria aún es insuficiente, luego haga la transición Vaya al estado delta (delta) (q2-gt; delta, q3-gt; delta; si q4 está vacío, obtenga la información de la cola (q3) del estado beta, si q3 también está vacío, obtenga la información). información del estado delta La información se lee de la cola y se transmite a q3.

Los pasos anteriores son solo pasos generales. Los pasos intermedios se pueden omitir durante la operación real. Por ejemplo, el mensaje se puede colocar en la cola q4 al principio y los elementos en la cola q1 saltarán directamente. a la cola q4 (aquí En ambos casos, las colas q3, delta y q2 están vacías cuando la cola delta está vacía, la cola q2 puede saltar directamente a la cola q3 y la cola q1 puede saltar directamente a q3);

Lógica de flujo de mensajes en el proceso de cola del sistema RabbitMQ 1. Publicar (insertar mensaje)

Si la cola q3 está vacía, coloque el mensaje en la cola q4.

Póngalo en la cola Q4. Si la cola Q3 no está vacía, coloque el mensaje en la cola Q1. 2. Convierta el mensaje alfa en un mensaje beta (ponga el contenido del mensaje en el archivo del disco) (función push_alphas_to_betas)

(1).Escribir mensajes en la cola Q3. Si el número de mensajes en el archivo del disco no es 0, escribir los mensajes en Q1 en la cola Q2.

(2).Transformación del Cola Q4, colocando el mensaje desde el final de la cola Q4 hasta el final de la cola Q3 3. Convertir mensajes de tipo beta en mensajes de tipo delta (función push_betas_to_deltas)

(1). el final de la cola Q3 Almacenar en el archivo de disco

(2) Almacene el índice de la cola del mensaje en la cola Q2 en el archivo de disco 4. Si los paquetes en las colas Q4 y Q3 están vacíos y hay paquetes en el archivo del disco, el paquete se leerá del disco y se convertirá de paquetes de tipo delta a paquetes de tipo beta

(1). después de leer el archivo de disco del índice de la cola, no hay más mensajes en el archivo de disco, primero almacene los mensajes leídos al final de la cola Q3 y luego almacene los mensajes en la cola Q2 al final de la cola Q3.

(2) Si todavía hay paquetes en el archivo de disco después de leer el archivo de disco del índice de la cola, los paquetes leídos se almacenarán al final de la cola del tercer trimestre.

p><. p>.