es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

RabbitMQ con muchas colas pequeñas para hacer cumplir la ejecución secuencial (¿patrón o anti-patrón)?

Escenario hipotético (pero más simple):

  • Tengo muchos pedidos en mi sistema.
  • Tengo disparadores externos que afectan esos pedidos (por ejemplo, webhooks). Pueden ocurrir en paralelo y son manejados por diferentes instancias en mi clúster.
  • Dentro del ámbito de un solo pedido, me gustaría asegurarme de que esos eventos se procesen en orden secuencial para evitar condiciones de carrera, conflictos de versiones, etc.

  • Los eventos de diferentes pedidos pueden (y deben) procesarse en paralelo.

Actualmente estoy considerando utilizar RabbitMQ con una configuración similar a esta:

  • Utilizar una cola para cada pedido (crearla sobre la marcha).
  • Si ocurre un evento, colocarlo en esa cola.

Esas colas tendrían una vida corta, por lo que no terminaría con millones de ellas, pero de todos modos debería poder escalar (digamos en el rango de miles de dígitos bajos si el proyecto crece sustancialmente). La pregunta es si eso es un patrón absolutamente incorrecto en lo que respecta a RabbitMQ (o sistemas similares), o si existen mejores soluciones para garantizar la ejecución secuencial de todos modos.

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en IT especializado en RabbitMQ y flujos de trabajo secuenciales, puedo proporcionarte las siguientes sugerencias para tu escenario:

    Utilizar RabbitMQ con una cola por pedido puede ser una solución viable para asegurar el procesamiento secuencial de eventos dentro del alcance de un único pedido. Este enfoque puede ayudar a prevenir condiciones de carrera, conflictos de versiones y otros problemas que pueden surgir de un procesamiento paralelo.

    Como mencionaste, la creación de colas de corta duración puede evitar la acumulación de un número excesivo de colas. Además, puedes configurar RabbitMQ para asegurar que los mensajes se consuman en el mismo orden en el que fueron recibidos mediante un enfoque de primero en entrar, primero en salir (FIFO).

    Para implementar este enfoque, puedes configurar tus webhooks para publicar mensajes en la cola correspondiente al pedido en lugar de procesar los eventos directamente. Las instancias en tu clúster pueden entonces consumir mensajes de estas colas en paralelo, asegurando que los eventos de un único pedido sean procesados secuencialmente.

    En resumen, utilizar RabbitMQ de esta manera puede ser una solución efectiva para garantizar el procesamiento secuencial de eventos dentro del contexto de un único pedido, al tiempo que permite el procesamiento paralelo de eventos en varios pedidos.

Comments are closed.