web-dev-qa-db-fra.com

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, d'autre part, est plus un modèle "pull", où les consommateurs retirent des messages d'une file d'attente.

Suis-je complètement hors piste ici?

80
Anton Gogolev

Dans l'ensemble, 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 pull comme vous le décrivez.

Le [~ # ~] bus [~ # ~] vs [~ # ~] file d'attente [~ # ~] est en effet quelque peu un concept hérité, provenant plus récemment de systèmes comme IBM MQ et Tibco Rendezvous. MQ était à l'origine un système 1: 1, en fait une file d'attente pour découpler divers systèmes.

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

Cependant (et les nouveaux produits concurrents) peuvent jouer dans l'espace de l'autre de nos jours. Les deux peuvent être configurés pour interrompre et interroger les nouveaux messages. Les deux assurent la médiation des interactions entre divers systèmes.

Cependant la phrase file d'attente de messages est également utilisée pour les pompes de messages intra-thread internes et similaires, et dans ce contexte, l'usage est en effet différent. Si vous pensez à la pompe à messages Windows classique, il s'agit bien plus du modèle pull que vous décrivez, mais c'est vraiment plus intra-app qu'inter-app ou inter-box.

38
sdg

Bus de messages

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

enter image description here

Source: EIP

File d'attente des messages

L'idée de base d'une file d'attente de messages est simple:

  • Deux (ou plus) processus peuvent échanger des informations via l'accès à une file d'attente de messages système commune .

  • Le processus d'envoi place via un module de passage de message (OS) un message dans une file d'attente qui peut être lu par un autre processus

Source: Dave Marshall

enter image description here

Source de l'image

Différence

Message Queue contient [~ # ~] fifo [~ # ~] ( premier entré, premier sorti) règle alors que dans Message Bus ne le fait pas.

Conclusion

Les deux [~ # ~] semblent [~ # ~] comme faire le même genre de travail - passer des messages entre deux Applications ou Modules ou Interfaces ou Systèmes ou Processus , sauf petite différence de [~ # ~] fifo [~ # ~ ]

92
vijay

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

QUEUE

Une file d'attente de messages reçoit des messages d'une application et les met à la disposition d'une ou plusieurs autres applications selon le principe du premier entré, premier sorti (FIFO). 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 écrit des messages distincts dans chaque file d'attente et chaque application dépendante lit dans son propre file d'attente (le message étant supprimé lors de la mise en file d'attente). Ni B ni C ne doivent être disponibles pour que A puisse envoyer des mises à jour. Chaque file d'attente de messages est persistante, donc si une application redémarre, elle commencera à extraire de sa file d'attente une fois qu'elle sera de nouveau en ligne. Cela permet de briser les dépendances entre les systèmes dépendants et peut fournir une plus grande évolutivité et tolérance aux pannes pour les applications.

BUS

Un bus de messages ou un bus de services permet à une (ou plusieurs) application de communiquer des messages à une ou plusieurs autres applications. Il peut n'y avoir aucune garantie de commande premier entré, premier sorti, 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 qui peut également bénéficier de ces mises à jour. L'application C peut être configurée pour écouter le bus de messages et prendre également des mesures en fonction de ces mises à jour, sans nécessiter de mise à jour de l'application A. Contrairement aux files d'attente, où l'application d'envoi ajoute explicitement des messages à chaque file d'attente, un bus de messages utilise une publication/modèle d'abonnement. Les messages sont publiés sur le bus et toute application qui s'est abonnée à ce type de message le recevra. Cette approche permet aux applications de suivre le principe ouvert/fermé, car elles deviennent ouvertes aux changements futurs tout en restant fermées aux modifications supplémentaires.

SOURCE

16
Jibran

La principale différence qui n'a pas vraiment été explicitement mentionnée dans les autres réponses est qu'un bus de messages permet plusieurs abonnés alors qu'une file d'attente retirera les éléments un par un à tout ce qui écoute la file d'attente. Si vous vouliez que plusieurs auditeurs voient les mêmes éléments sortir de la file d'attente, vous devriez gérer cela vous-même, un bus de service le ferait pour vous.

11
Matt

La façon dont je le vois est que la file d'attente de messages crée le bus de messages . Les clients (c'est-à-dire 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 ni se soucier de qui va les recevoir. Pour une description plus approfondie de ce scénario, vous pouvez vérifier cet article .

3
rdalmeida

Service Bus est un terme plus général qu'une file d'attente de messages.

MQ est un FIFO simple, mais il existe des moyens plus sophistiqués d'implémenter un Service Bus, c'est-à-dire un Event Hub, qui est un énorme "centre" pour manipuler les messages. Outre les fonctionnalités fournies par MQ, il permet de stocker les messages (et donc d'utiliser plusieurs abonnés), etc.

0
Novellizator