J'utilise rabbitMQ, je prends chaque message de la file d'attente avec basic_get sans procédure d'acquittement automatique, ce qui signifie que le message reste dans la file d'attente jusqu'à ce que j'accumule ou annule le message.
Parfois, j'ai des messages qui ne peuvent pas être traités à cause d'une exception qui les empêchait d'être complètement traités.
La question est de savoir ce qui importe si je reçois à la fois les messages en cas de succès et d’exception, je veux dire en termes de résultats, les messages de sortie sortiront toujours de la file d’attente, alors qu’importe que j’utilise ack ou nack dans ce scénario? ____.] Peut-être que quelque chose me manque lors de l'utilisation de chaque opération?
La commande basic.nack est apparemment une extension RabbitMQ, qui étend les fonctionnalités de basic.reject pour inclure un mode de traitement en bloc. Les deux incluent un drapeau "bit" (c'est-à-dire booléen) de requeue
, vous avez donc plusieurs choix:
nack
/reject
avec requeue=1
: le message sera renvoyé dans la file d'attente d'où il provient comme s'il s'agissait d'un nouveau message; cela pourrait être utile en cas de panne temporaire du côté du consommateurnack
/reject
avec requeue=0
et un échange de lettres mortes (DLX) configuré, publiera le message sur cet échange, ce qui lui permettra d'être récupéré par une autre file d'attente.nack
/reject
avec requeue=0
et aucun DLX ne supprimera simplement le messageack
enlèvera le message de la file même si un DLX est configuréSi vous n'avez pas configuré DLX, toujours utiliser ack
sera identique à nack
/reject
avec requeue=0
; Cependant, l'utilisation de la fonction logiquement correcte dès le départ vous donnera plus de flexibilité pour configurer les choses différemment ultérieurement.
Ack et Nack suppriment tous deux le message de la file d'attente. La différence est que lorsque vous envoyez un message à Nack, il passe dans la file d'attente de lettres mortes (DLX) s'il en existe une définie pour cette file d'attente.