En el proceso de usar RabbitMQ, algunos escenarios comerciales requieren asegurar la consunción secuencial. Por ejemplo, en un escenario donde se generan tres mensajes para realizar operaciones de adición, modificación y eliminación de datos, si no se garantiza el orden de consumo, la secuencia de ejecución puede llegar a ser eliminación, modificación, adición, causando desorden.

Como se muestra a continuación:

Se deben considerar tres aspectos sobre la secuenciación de mensajes en RabbitMQ: el orden de envío de mensajes, el orden de mensajes en la cola y el orden de consumo de mensajes.

Orden de envío de mensajes

Para la mayoría de las empresas, no se requiere estrictamente un orden en la transmisión de mensajes en el extremo del remitente del mensaje. No importa quién envíe el mensaje primero. Si una empresa requiere que los mensajes se envíen en orden, significa que solo se puede enviar un mensaje a la vez con un bloqueo global, y no se pueden enviar mensajes concurrentemente.

Orden de mensajes en la cola

En RabbitMQ, los mensajes se almacenarán en una cola. Dentro de la misma cola, los mensajes se ordenan según el principio de primero en entrar, primero en salir, lo cual está garantizado por RabbitMQ y generalmente no suele ser una preocupación para los desarrolladores.

Nota: No se garantiza el orden de los mensajes en diferentes colas. Por ejemplo, al entrar a una estación de metro, si te unes a una de tres colas, no se puede garantizar el orden de entrada a la estación entre las diferentes colas.

Orden de consumo de mensajes

Cuando se discute cómo garantizar la secuenciación de mensajes, generalmente nos referimos al orden en el que los consumidores consumen los mensajes. En escenarios donde múltiples consumidores consumen mensajes de la misma cola de mensajes, generalmente no es posible garantizar la secuenciación de mensajes. Como se indica en el diagrama de apertura, aunque los mensajes en la cola de mensajes están ordenados, varios consumidores que consumen mensajes concurrentemente, la velocidad a la que se recuperan los mensajes, la velocidad de ejecución lógica empresarial y posibles excepciones de ejecución pueden llevar a una secuenciación de mensajes inconsistente.

Por ejemplo: Los mensajes A, B y C ingresan a la cola en secuencia. El consumidor A1 obtiene el mensaje A y el consumidor B1 obtiene el mensaje B. Sin embargo, si el consumidor B1 se ejecuta más rápido, puede completarse antes que el consumidor A1, o si el consumidor A1 encuentra un error, ambos escenarios pueden llevar a una secuenciación de mensajes inconsistente.

La solución típica al problema de consumir en secuencia es que una cola tenga solo un consumidor De esta manera, los mensajes se pueden procesar uno por uno en orden. La desventaja es que la capacidad concurrente disminuye y no es posible el consumo de mensajes concurrentes. Este es un compromiso.

Nota: Si la empresa requiere un consumo secuencial y un aumento de la concurrencia, un enfoque común es habilitar varias colas. La empresa puede distribuir mensajes a diferentes colas según reglas, aumentando así el nivel de concurrencia. Por ejemplo, en un escenario de pedidos de comercio electrónico, solo es necesario asegurar la secuencia de mensajes de pedido para el mismo usuario. Los mensajes pertenecientes a diferentes usuarios pueden dirigirse a diferentes colas.