Saltar al contenido

¿Cómo configuro una cantidad de reintentos en RabbitMQ?

Revisamos de forma exhaustivamente cada post en nuestro sitio web con la meta de enseñarte en todo momento la información certera y actual.

Solución:

No existe una función como los intentos de reintento en RabbitMQ (así como en el protocolo AMQP).

Posible solución para implementar el comportamiento de límite de intentos de reintento:

  1. Vuelva a enviar el mensaje si no se volvió a enviar previamente (marque redelivered parámetro en basic.deliver método: su biblioteca debe tener alguna interfaz para esto) y suéltelo y luego capte el intercambio de mensajes fallidos, luego procese de alguna manera.

  2. Cada vez que no se pueda procesar un mensaje, publíquelo de nuevo, pero establezca o aumente/disminuya el campo del encabezado, digamos x-redelivered-count (aunque puedes elegir el nombre que quieras). Para tener control sobre los reenvíos en este caso, debe verificar el campo que estableció si alcanza algún límite (superior o inferior – 0 es mi elección, a-la ttl en el encabezado ip de tcp/ip).

  3. Almacenar mensaje único key (diga uuid, pero debe configurarlo manualmente cuando publique el mensaje) en Redis, Memcache u otro almacenamiento, incluso en mysql junto con el recuento de reenvíos y luego, en cada reenvío, incremente/disminuya este valor hasta que alcance el límite.

  4. (para verdaderos geeks) escriba un complemento que implementará el comportamiento que desee.

La prueba #3 es que el mensaje reenviado permanece en la cabecera de la cola. Esto es importante si tiene una cola larga o si el orden de los mensajes es importante para usted (tenga en cuenta que las reentregas romperán el orden estricto de los mensajes, consulte los documentos oficiales para obtener más detalles o esta pregunta en SO).

PD:

Hay una respuesta similar en este tema, pero en php. Míralo, tal vez te ayude un poco (comienza a leerlo de palabras “Existen múltiples técnicas para lidiar con el problema de reentrega de ciclos”.

Aunque esta es una pregunta antigua, creo que ahora puede hacer esto fácilmente con la combinación de intercambios de mensajes fallidos y encabezado x-death array agregado una vez que un mensaje está muerto:

El proceso de escritura fallida agrega un array al encabezado de cada mensaje fallido llamado x-death. Este array contiene una entrada para cada evento de mensajes fallidos, identificados por un par de cola, motivo. Cada una de estas entradas es una tabla que consta de varios campos:

cola: el nombre de la cola en la que estaba el mensaje antes de que se dejara sin mensajes fallidos

motivo: motivo de las letras muertas, ver más abajo

hora: la fecha y la hora en que el mensaje se envió con letras muertas como una marca de tiempo AMQP 0-9-1 de 64 bits

intercambio: el intercambio en el que se publicó el mensaje (tenga en cuenta que este será un intercambio de mensajes fallidos si el mensaje tiene mensajes fallidos varias veces)

enrutamiento-keys: el enrutamiento keys (incluyendo CC keys pero excluyendo los BCC) el mensaje fue publicado con

recuento: cuántas veces este mensaje se ha dejado con mensajes fallidos en esta cola por este motivo

original-expiration (si el mensaje se escribió con letras fallidas debido al TTL por mensaje): la propiedad de vencimiento original del mensaje. La propiedad de caducidad se elimina del mensaje en los mensajes fallidos para evitar que caduque de nuevo en las colas a las que se enruta.

Lea este gran artículo para obtener más información.

mira este sorteo:

ingrese la descripción de la imagen aquí

Si guardas algún reparo o forma de renovar nuestro crónica puedes dejar un informe y con placer lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *