Message Queue vs Message Bus – Quelles sont les différences?

Et y en a-t-il? Pour moi, MB connaît à la fois les abonnés et les éditeurs et agit en tant que médiateur, informant les abonnés sur les nouveaux messages (en fait, un modèle «push»). MQ, en revanche, est plutôt un modèle «tiré», dans lequel les consommateurs retirent les messages d’une file d’attente.

Suis-je complètement hors piste ici?

En gros, en ce qui concerne les produits logiciels des fournisseurs, ils sont utilisés de manière interchangeable et n’ont pas les distinctions fortes en termes de push ou de pull que vous décrivez.

Le BUS vs QUEUE est en effet un concept hérité, issu plus récemment de systèmes tels que IBM MQ et Tibco Rendezvous. MQ était à l’origine un système 1: 1, voire une queue pour découpler différents systèmes.

En revanche, Tibco était (vendu comme un) backbone de messagerie, où vous pouviez avoir plusieurs éditeurs et abonnés sur les mêmes sujets.

Les deux (et les nouveaux produits concurrents) peuvent jouer dans l’espace de l’autre ces jours-ci. Les deux peuvent être configurés pour interrompre et interroger de nouveaux messages. Tous deux interviennent dans les interactions entre différents systèmes.

Toutefois, l’expression ” queue de messages” est également utilisée pour les pompes de messages internes à un thread et autres, et dans ce contexte, l’utilisation est effectivement différente. Si vous pensez à la pompe à messages Windows classique, il s’agit bien plus du modèle à tirer que vous décrivez, mais il est vraiment plus intra-application que l’inter-application ou l’inter-box.

Bus de messages

Un bus de message est une infrastructure de messagerie permettant à différents systèmes de communiquer via un ensemble partagé d’interfaces ( bus de messages ).

entrer la description de l'image ici

Source: EIP

File d’attente de messages

L’idée de base d’une queue de messages est simple:

  • Deux processus (ou plus) peuvent échanger des informations via l’ access à une queue de messages système commune .

  • Le processus d’envoi envoie via un module de passage de message (OS) un message dans une queue qui peut être lu par un autre processus

Source: Dave Marshall

entrer la description de l'image ici

Source d’image

Différence

Message Queue contient la règle FIFO ( premier entré, premier sorti ) alors que dans Message Bus, ce n’est pas le cas.

Conclusion

Les deux regardent comme faisant le même genre de travail – en passant des messages entre deux applications ou modules ou interfaces ou systèmes ou processus , sauf une petite différence de FIFO

La principale différence qui n’a pas été explicitement mentionnée dans les autres réponses est qu’un bus de messages permet à plusieurs abonnés, tandis qu’une file d’attente va désemparer les éléments un à un pour écouter la file d’attente. Si vous souhaitez que plusieurs auditeurs voient les mêmes éléments provenant de la queue, vous devrez les gérer vous-même, un bus de service le fera pour vous.

Selon moi, la queue de messages crée le bus de messages . Les clients (c.-à-d. Les nœuds) peuvent alors écouter le bus de messages. Cela est particulièrement vrai dans le cas où vous avez un MQ diffusant des messages via UDP, en d’autres termes, il envoie des messages à une adresse de diffusion / multidiffusion sans savoir ou se soucier de savoir qui va les recevoir. Pour une description plus détaillée de ce scénario, vous pouvez consulter cet article .

Il y a eu un brouillage des lignes entre ces deux concepts, car certains produits prennent désormais en charge des fonctionnalités qui appartenaient auparavant uniquement à l’une ou l’autre catégorie (par exemple, Azure Service Bus prend en charge les deux approches).

QUEUE

Une queue de messages reçoit les messages d’une application et les met à la disposition d’une ou plusieurs autres applications d’une manière premier entré, premier sorti. Dans de nombreux scénarios architecturaux, si l’application A doit envoyer des mises à jour ou des commandes aux applications B et C, des files d’attente de messages distinctes peuvent être configurées pour B et C. A écrirait des messages distincts dans chaque queue. propre queue (le message étant supprimé lors de la sortie de la queue). Ni B ni C ne doivent être disponibles pour que A puisse envoyer des mises à jour. Chaque queue de messages est persistante. Par conséquent, si une application redémarre, elle commence à sortir de sa queue une fois remise en ligne. Cela permet de rompre les dépendances entre les systèmes dépendants et peut offrir une plus grande évolutivité et une meilleure tolérance aux pannes des applications.

AUTOBUS

Un bus de message ou un bus de service permet à une application (ou plus) de communiquer des messages à une ou plusieurs autres applications. Il ne peut y avoir aucune garantie de premier ordre, et les abonnés au bus peuvent aller et venir à l’insu des expéditeurs de messages. Ainsi, une application A pourrait être écrite pour communiquer des mises à jour d’état à l’application B via un bus de messages. Plus tard, l’application C est écrite et peut également bénéficier de ces mises à jour. L’application C peut être configurée pour écouter le bus de messages et prendre des mesures en fonction de ces mises à jour, sans nécessiter de mise à jour de l’application A. Contrairement aux files d’attente, l’application d’envoi ajoute explicitement des messages à chaque queue. modèle d’abonnement. Les messages sont publiés sur le bus et toute application abonnée à ce type de message le reçoit. Cette approche permet aux applications de suivre le principe d’ouverture / de fermeture, car elles s’ouvrent à de futurs changements tout en restant fermées à toute modification supplémentaire.

LA SOURCE