Confusion de messages: Pub / Sub vs Multicast vs Fan Out

j'ai évalué les technologies de messagerie pour mon entreprise, mais je suis devenu très confus par les différences conceptuelles entre quelques termes:

Pub/Sub vs Multicast vs Fan Out Je travaille avec les définitions suivantes:

  • Pub / Sub les éditeurs doivent remettre une copie distincte de chaque message à chaque abonné qui signifie que la possibilité de garantir la livraison existe
  • Fan Out a une file d'attente unique poussant à l'écoute client.
  • Multicast seulement les spams des données et si quelqu'un est à l'écoute alors tout va bien, si non, il n'a pas d'importance. Aucune possibilité de garantir un client obtient certainement un message.

ces définitions sont-elles correctes? Ou est Pub / Sub le modèle et multicast, direct, la distribution etc. comment atteindre le modèle?

j'essaie de trouver les définitions de RabbitMQ dans notre architecture, mais je tourne en rond en essayant d'écrire les spécifications de notre application.

quelqu'un pourrait-il me dire si j'ai raison?

36
demandé sur Brian Kelly 2011-11-24 23:22:34

3 réponses

je suis confus par votre choix de trois termes à comparer. Au sein de RabbitMQ, Fanout et Direct sont des types d'échange. Pub-Sub est un modèle de messagerie générique mais pas un type d'échange. Et vous n'avez même pas mentionné le troisième et le plus important Type D'échange, à savoir le sujet. En fait, vous pouvez implémenter le comportement de Fanout sur un échange de sujets simplement en déclarant plusieurs files d'attente avec la même clé de liaison. Et vous pouvez définir un comportement Direct sur un échange de thème en déclarant une file d'attente avec * comme le générique clé de liaison.

Pub-Sub est généralement compris comme un modèle dans lequel une application publie des messages qui sont consommés par plusieurs abonnés.

avec RabbitMQ / AMQP il est important de se rappeler que les messages sont toujours publiés pour les échanges. Puis échange route vers les files d'attente. Et les files d'attente transmettent des messages aux abonnés. Le comportement de l'échange est important. Dans les échanges de sujets, la clé de routage de l'éditeur est mise en correspondance avec la clé de liaison de l'abonné afin de prendre la décision de routage. Les clés de liaison peuvent avoir des caractères génériques qui influencent davantage la décision de routage. Un routage plus compliqué peut être basé sur le contenu des en-têtes de message utilisant un type d'échange de en-têtes

RabbitMQ ne garantit pas la livraison des messages, mais vous pouvez obtenir une livraison garantie en choisissant les bonnes options(mode de livraison = 2 pour msgs persistants), et la déclaration des échanges et les files d'attente à l'avance de l'exécution de votre application de sorte que les messages ne sont pas rejetés.

35
répondu Michael Dillon 2017-05-23 12:18:04

vos définitions sont assez correctes. Notez que la livraison garantie n'est pas limitée au pub/sub seulement, et il peut être fait avec fanout aussi. Et oui, pub / sub est une description très basique qui peut être réalisée avec des méthodes spécifiques comme fanout, direct et ainsi de suite.

il y a plus de modèles de messagerie que vous pourriez trouver utiles. Consultez Enterprise Integration Patterns pour plus de détails.

7
répondu Brian Kelly 2011-11-25 04:31:22

du point de vue de l'échange électronique, le terme" Multicast "signifie" le message est placé sur le fil une fois "et toutes les applications clientes qui écoutent peuvent lire le message sur le"fil". Toute solution qui fait N copies du message pour les n clients n'est pas multicast. En plus d'examiner le code source, on peut également utiliser un "renifleur" pour déterminer combien de copies du message est envoyé par le biais du système de messagerie. Et oui, les messages multicast sont une forme le message du protocole UDP. Voir: http://en.wikipedia.org/wiki/Multicast pour une description générale. Il y a une dizaine d'années, nous avons utilisé le système de messagerie de TIBCO qui supportait multicast. Voir: https://docs.tibco.com/pub/ems_openvms_c_client/8.0.0-june-2013/docs/html/tib_ems_users_guide/wwhelp/wwhimpl/common/html/wwhelp.htm#context=tib_ems_users_guide&file=EMS.5.091.htm

1
répondu California-OldGuy 2014-10-22 22:41:15