Vous devez vous abonner à toutes les files d'attente vers lesquelles les messages ont été acheminés et les consommer avec ack. Par exemple, si vous publiez un échange de sujet avec "test" comme clé de routage, et qu'il y a 3 files d'attente persistantes qui s'abonnent à "test", vous devrez consommer ces trois files d'attente. Il serait peut-être préférable d'ajouter une autre file d'attente que vos processus consommateurs écouteraient aussi, et dites-leur d'ignorer ces messages. Une alternative, puisque vous utilisez RabbitMQ, est d'écrire un plugin d'échange personnalisé qui acceptera certaines instructions hors bande pour effacer toutes les files d'attente. Par exemple vous pourriez avoir cet échange lire un en-tête spécial de message qui lui indique pour effacer toutes les files d'attente auxquelles ce message est destiné. Cela nécessite d'écrire du code Erlang, mais il y a 4 types d'échanges différents implémentés, vous n'avez donc besoin que de copier le code le plus similaire et d'écrire le code pour les nouveaux comportements. Si vous n'utilisez que des en-têtes personnalisés, le corps du message peut être un message normal pour les consommateurs.
Pour résumer:
1) l'éditeur a besoin de consommer les messages se 2) l'éditeur peut envoyer un message spécial dans une file d'attente spéciale pour dire aux consommateurs d'ignorer le message 3) l'éditeur peut envoyer un message spécial à un échange personnalisé qui effacera tous les messages existants des files d'attente avant d'envoyer ce message spécial aux consommateurs.
Non, cela résout un problème différent. Je n'ai pas besoin de rejeter un message du côté des consommateurs, je veux annuler sa livraison du côté du producteur, afin que le message ne parvienne pas au consommateur comme s'il n'avait jamais existé. Dans mon problème, un consommateur ne peut pas décider si un message doit être rejeté. – jkff
Si des messages ont été publiés avec succès et que vous devez les supprimer de la file d'attente connue, abonnez-vous et consommez-les au producteur. –