2016-07-22 1 views
0

Dire que j'ai this pub/sub modèle mis en œuvre:Comment envoyer un message à un abonné de chaque groupe dans RabbitMQ?

enter image description here

Donc, fondamentalement, je livre un message à chaque C, qui a souscrit à échanger X.

J'ai des cas de P, et un des abonnés du lot comme C. Définissons C10, C11, C12, C13 en tant que groupe C1 et C20, C21, C22, C23 en tant que groupe C2.

Comment envoyer un message afin qu'un seul C reçoive un message de chaque groupe? (Je vais parfaitement bien avec round robin)

+0

Vous voulez donc qu'un seul message C2 soit reçu par un seul des C2n-s? – cantSleepNow

+0

@cantSleepNow Je veux qu'un message soit envoyé à chaque groupe, un receveur par groupe ('cat' devrait être livré à l'un des' mammals' (soit 'cat' ou' dog' ...) ET à l'un des 'sons' '(meow' ou' roar') – desertkun

Répondre

0

Apparemment ce dont j'avais besoin était un échange fanout avec des files d'attente nommées au lieu de exclusive.

enter image description here

Chaque service C déclare une file d'attente nommée non exclusive et se fixe à l'échange. Et lie un consommateur à cette file d'attente.

Si deux services déclarent une même file d'attente et lient un client, ils finissent par être arrondis.

2

Il suffit d'aller à topics tutorial. La clé de routage doit ressembler à C.C1 ou C.C2.

Fondamentalement, envoyer des messages avec routage C.* clé (donc, ils iront à C.C1 XOR C.C2), et abonnez-vous à chaque consommateur C.C1 XOR C.C2. RMQ distribuera des messages à tous les consommateurs abonnés à la clé de routage C.CN en mode round-robin.

+0

Merci pour votre aide, mais semble la réponse est beaucoup plus facile.En outre, je n'ai pas réussi à envoyer un message avec une clé de routage 'C. *' comme vous avez mentionné. – desertkun