RabbitMQ morte lettre de change ne jamais recevoir les messages
Je suis en train de configurer mon premier RabbitMQ morte lettre de change, voici les étapes que j'utilise par le biais de l'interface admin web:
- Créer de nouveaux échanges DIRECTS avec le nom "morts.lettre.test"
- Créer une nouvelle file d'attente de morts".lettre.la file d'attente"
- Lier "morts.lettre.la file d'attente" à "mort.lettre.test"
- Créer une nouvelle file d'attente "test1" avec les morts lettre de change fixé à "mort.lettre.test"
- Envoyer un message dans "test1"
- Nack (avec requeue = false) le message dans "test1"
Je m'attends à ce que ces étapes doivent mettre un enregistrement dans la "mort.lettre.la file d'attente" par le biais de la "mort.lettre.test" d'échange. Ce n'est pas le cas.
Je peux mettre manuellement un message dans les "morts.lettre.test" de l'échange et de la "mort.lettre.la file d'attente" donc je sais que c'est très bien.
Quand je regarde l'administrateur de l'INTERFACE utilisateur, il montre que le DLX paramètre est configuré sur la file d'attente "test1".
Où vais-je tort?
- Quelle clé de routage utilisez-vous?
Vous devez vous connecter pour publier un commentaire.
Gentilissimo Signore a eu la gentillesse de répondre à ma question sur Twitter. Le problème est que si votre lettre morte de change est le programme d'installation vous diriger doit spécifier une lettre morte clé de routage. Si vous souhaitez simplement tous vos NACKed message pour aller dans une lettre morte seau pour une enquête plus tard (comme moi) alors votre lettre morte échange doit être configuré comme une SORTANCE.
Voici la mise à jour des étapes de travail:
Morte Lettre de Change sans clé de routage et avec échange direct
Suivez les étapes ceux-ci travaillent pour assurer:-
1. Créer une nouvelle file d'attente nommée 'dead_queue'.
2. Créer un échange appelé 'dead_exchange' et le type d'échange doit être "directe".
3. Lier 'dead_queue " et " dead_exchange', sans clé de routage.
4. Créer une nouvelle file d'attente nommée 'test_queue "et ses" x-dead-lettre-change' nom 'dead_exchange'
5. Créer un échange appelé 'test_exchange' et le type d'échange doit être "directe"
6. Lier 'test_exchange " et " test_queue', sans clé de routage.
Et à la fin nous allons le vérifier. Pour cela publier quelque chose sur "test_exchange " avec l'argument 'expiration' 10000. Après cela, lorsqu'un message est de publier sur "test_exchange " il va aller à 'test_queue " et quand un message est arrivé à expiration avec dans une file d'attente, il va chercher DLX Paramètre(Lettre Morte Échange de nom) il y a ce message trouver le nom, 'dead_exchange", alors que les message atteindra 'dead_exchange' livrer 'mort de la file d'attente' ..
Si vous avez un problème à ce sujet et si je rate compris ton problème... écrire votre problème, je vais sûrement regarder par-dessus... Merci..
Remarque: Doit publier le message sur " test_exchange', parce que test_queue et test_exchange de liaison est sans clé de routage et qu'il fonctionne bien, mais Si vous publiez un message sur "test_queue " par défaut échange et de routage clé sera utilisée.Puis, après expiration d'un délai de file d'attente de message tente de remettre dead message à dead_exchange avec certains de routage par défaut de la clé et le message ne sera pas aller à cette file d'attente.
[email protected]
Si vous souhaitez utiliser le routage personnalisé clé sur la mort d'échange de lettres, vous avez à mettre
x-dead-letter-routing-key
lors de la déclaration de travail de la file d'attente (dans votre cas, il esttest1
), sinon de routage par défaut de la clé sera utilisé. Dans votre cas, RabbitMQ courtier détecte le vélo et il suffit de déposer les messages rejetés.Ce que vous avez besoin est d'avoir
x-dead-letter-exchange=dead.letter.test
etx-dead-letter-routing-key=dead.letter.queue
arguments exposés surtest1
file d'attente.Si vous voulez que tous vos files d'attente pour avoir la même lettre morte de change, il est plus facile de définir une politique générale:
N'avez pas besoin de créer de SORTANCE échange si il n'est pas obligatoire.
Vous pouvez créer échange DIRECT à l'aide de la même clé de routage qui vous ont déjà utilisé pour d'autres échanges. Et aussi n'avez pas besoin de créer une nouvelle file d'attente pour la nouvelle bourse. Vous pouvez utiliser les files d'attente existantes avec de nouveaux échanges. Vous avez juste besoin de lier de nouveaux échanges avec la file d'attente.
Voici mon receive.js fichier:
Corriger
Corriger
Corriger
Je suis en supposant que vous êtes la création de test1 file d'attente et de la lier à mort.lettre.test de change
Si vous voulez que votre message soit reçu par la mort.lettre.la file d'attente, vous devrez fournir la clé de routage lors de l'envoi du message et les clients consommant morts.lettre.la file d'attente doit également utiliser la même clé de routage
Si vous publiez sans clé de routage, puis seuls les clients qui sont abonnés à test1 recevront le message.
Si vous publiez un message direct.lettre.test de change, alors tous la file d'attente recevront le message. Il fonctionne comme une sortance échange
Donc, si vous voulez morts.lettre.file d'attente pour recevoir message, vous aurez pour publier un message dans la file d'attente ou vous devrez utiliser la même clé de routage lors de la publication et d'abonnement et de publier de message à l'échange