Lorsque le consommateur reçoit le message et que la tâche de traitement est terminée, il envoie un appel avec cet identifiant de message pour informer le serveur que le message a été reçu et que le traitement est terminé. RabbitMQ attend que la liaison du consommateur traitant un message soit perdue avant de déterminer que le message n’a pas été traité correctement, donc RabbitMQ retransmet le message. L’accusé de réception des messages est désactivé par défaut. Il existe un paramètre noAck lors de l’initialisation de Consommateur,Si elle est réglée sur true, le consommateur répondra à un ack dès qu’il reçoit le message。
De manière générale, le scénario couramment utilisé noack est habituellement validé, mais pour les projets à haut risque, comme le paiement. Pour chaque message, nous devons en assurer l’intégrité et la justesse. Après avoir reçu le message, vous devez confirmer que la logique métier correcte est exécutée, puis renvoyer activement un appel au serveur. Vous pouvez consulter les messages dans la file via la commande rabbitmqctl list_queues nom message_rady message_unacknowleded, ou via l’interface de gestion en arrière-plan.
Si noAck est réglé sur false, le client doit envoyer activement un ack au serveur, et si le client ne confirme pas le message, la situation suivante se produira :
Tant que le programme est encore en cours, ces 10 messages restent non exécutés et ne peuvent pas être relivrés par RabbitMQ. Ce qui est encore plus puissant, c’est queLa consommation des messages RabbitMQ ne dispose pas de mécanisme de délai d’attente, c’est-à-dire que si le programme n’est pas redémarré, le message sera toujours en état Unacked. N’oubliez pas ces messages d’état non défectueux lorsque vous travaillez sur des événements opérationnels.
Prêt
Les messages avec ce statut existent dans la file d’attente pour être traités.
Non reconnu
Un message dans ce statut indique qu’il est déjà en cours de traitement mais pas accusé de réception.
Lorsque le programme est fermé (tant que le Consommateur est fermé), ces 10 messages reviennent en état Prêt.
Message de confirmation
Que se passe-t-il si le client envoie un appel au serveur ? C’est-à-dire, confirmer la réception du message ? Le code est le suivant :
Lorsque le second paramètre de la méthode BasicAck, multiple, est mis à false, cela signifie que RabbitMQ est informé que le message actuel a été accusé de réception.Si c’est vrai, un message supplémentaire plus petit que l’étiquette de livraison spécifiée par le premier paramètre sera reconnu。 (La confirmation en masse concerne toute la chaîne)
Annuler la confirmation
Que se passe-t-il si l’un des clients du programme distribué a une exception et souhaite annuler la confirmation du message et laisser d’autres clients traiter le message ?
Lorsqu’il y a une exception dans le message de consommation, nous devons annuler la confirmation, puis nous pouvons utiliser la méthode BasicReject de Channel.
Le premier paramètre spécifie l’étiquette de livraison, et le second paramètre décrit comment gérer ce message d’échec.Une valeur de vrai signifie que le message est remis dans l’en-tête de la file, et une valeur de faux signifie que le message est abandonné。
|