Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 26359|Respuesta: 2

Un análisis en profundidad del mecanismo de respuesta a mensajes de RabbitMQ

[Copiar enlace]
Publicado en 30/3/2018 10:42:59 | | | |


Cuando el consumidor recibe el mensaje y la tarea de procesamiento se completa, enviará un ack con este identificador de mensaje para informar al servidor de que el mensaje ha sido recibido y que el procesamiento está completado. RabbitMQ espera a que se pierda el enlace del consumidor que procesa un mensaje antes de determinar que el mensaje no se ha procesado correctamente, por lo que RabbitMQ retransmite el mensaje.
El acuse de acuse de recibo está desactivado por defecto. Existe un parámetro noAck al inicializar Consumidor,Si se configura como verdadero, el consumidor devolverá un ack tan pronto como reciba el mensaje


En términos generales, el escenario comúnmente utilizado como noack se establece como válido, pero para proyectos con requisitos de alto riesgo, como el pago. Para cada mensaje, debemos garantizar su integridad y corrección. Después de recibir el mensaje, necesitas confirmar que la lógica de negocio correcta está ejecutada y luego devolver activamente un ack al servidor. Puedes ver los mensajes en la cola a través del comando rabbitmqctl list_queues nombre message_rady message_unacknowleded, o a través de la interfaz de gestión en segundo plano.

Si noAck está configurado como falso, el cliente debe enviar activamente un ack al servidor, y si el cliente no confirma el mensaje, ocurrirá la siguiente situación:



Mientras el programa siga en ejecución, estos 10 mensajes permanecen sin ser detectados y no pueden ser reentregados por RabbitMQ. Lo que es aún más poderoso es queEl consumo de mensajes de RabbitMQ no tiene un mecanismo de tiempo de espera, es decir, si el programa no se reinicia, el mensaje siempre estará en estado Uncked. No olvides estos mensajes de estado descontrolado cuando trabajes en eventos operativos.

Listo

Los mensajes con este estado existen en la cola para ser procesados.

No reconocido

Un mensaje en este estado indica que ya está siendo procesado pero no se ha confirmado.




Cuando el programa está cerrado (mientras el Consumidor esté cerrado), estos 10 mensajes volverán al estado Listo.


Mensaje de confirmación

¿Y si el cliente envía un ack al servidor? Es decir, ¿confirmar la recepción del mensaje? El código es el siguiente:


Cuando el segundo parámetro del método BasicAck, multiple, se pone en false, significa que RabbitMQ recibe notificación de que el mensaje actual ha sido reconocido.Si es cierto, se reconocerá un mensaje adicional menor que la etiqueta de entrega especificado por el primer parámetro。 (La confirmación masiva es para todo el canal)

Cancelar confirmación

¿Qué pasa si uno de los clientes del programa distribuido tiene una excepción y quiere cancelar la confirmación del mensaje y dejar que otros clientes procesen el mensaje?

Cuando hay una excepción en el mensaje de consumo, necesitamos cancelar la confirmación y entonces podemos usar el método basicReject de Channel.

El primer parámetro especifica la etiqueta de entrega, y el segundo parámetro describe cómo manejar este mensaje de fallo.Un valor de verdadero significa que el mensaje se vuelve a poner en la cabecera de la cola, y un valor de falso significa que el mensaje está abandonado




Anterior:¡Te enseño a configurar tu propio servidor DNS!
Próximo:Baidu Maps para obtener coordenadas de la ciudad
Publicado en 22/9/2021 20:49:04 |
Aprende a aprender...
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com