Sujet JMS vs files d'attente


191

Je me demandais quelle est la différence entre une file d'attente JMS et un sujet JMS.

La page ActiveMQ dit

Les sujets

Dans JMS, une rubrique implémente la sémantique de publication et d'abonnement . Lorsque vous publiez un message, il est envoyé à tous les abonnés intéressés - donc zéro à plusieurs abonnés recevront une copie du message. Seuls les abonnés qui avaient un abonnement actif au moment où le courtier reçoit le message recevront une copie du message.

Files d'attente

Une file d'attente JMS implémente la sémantique de l' équilibreur de charge . Un seul message sera reçu par exactement un consommateur. Si aucun consommateur n'est disponible au moment de l'envoi du message, il sera conservé jusqu'à ce qu'un consommateur soit disponible pour traiter le message. Si un consommateur reçoit un message et ne l'accuse pas avant la fermeture, le message sera renvoyé à un autre consommateur. Une file d'attente peut avoir de nombreux consommateurs dont la charge des messages est équilibrée entre les consommateurs disponibles.

Je veux avoir «quelque chose» qui enverra une copie du message à chaque abonné dans la même séquence que celle dans laquelle le message a été reçu par le courtier ActiveMQ.

Des pensées?

Réponses:


147

Cela signifie qu'un sujet est approprié. Une file d'attente signifie qu'un message est envoyé à un et un seul abonné possible. Un sujet s'adresse à chaque abonné.


4
Avez-vous une idée du fonctionnement de l'équilibrage de charge pour les files d'attente dans JMS ou WSO2 MB?
Kulasangar

c'est intéressant parce que j'essayais de déboguer un abonné et lors de l'envoi d'un sujet, l'abonné n'était pas appelé, mais lors de l'envoi à la file d'attente, cela fonctionnait
vmrvictor

54

Les sujets concernent le modèle éditeur-abonné, tandis que les files d'attente concernent le point à point.


31

Une rubrique JMS est le type de destination dans un modèle de distribution 1-à-plusieurs. Le même message publié est reçu par tous les abonnés consommateurs . Vous pouvez également appeler cela le modèle «diffusion». Vous pouvez considérer un sujet comme l'équivalent d'un sujet dans un modèle de conception Observer pour l'informatique distribuée. Certains fournisseurs JMS choisissent efficacement de l'implémenter en tant qu'UDP au lieu de TCP. Pour le sujet, la remise du message est «feu et oublie» - si personne n'écoute, le message disparaît tout simplement. Si ce n'est pas ce que vous voulez, vous pouvez utiliser des «abonnements durables».

Une file d'attente JMS est une destination 1 pour 1 des messages. Le message est reçu par un seul des destinataires consommateurs (veuillez noter: l'utilisation systématique d' abonnés pour les clients de rubrique et de récepteurs pour les clients de file d'attente évite toute confusion). Les messages envoyés à une file d'attente sont stockés sur le disque ou la mémoire jusqu'à ce que quelqu'un le récupère ou qu'il expire. Les files d'attente (et les abonnements durables) ont donc besoin d'une gestion active du stockage, vous devez penser aux consommateurs lents.

Dans la plupart des environnements, je dirais que les sujets sont le meilleur choix car vous pouvez toujours ajouter des composants supplémentaires sans avoir à changer l'architecture. Les composants ajoutés pourraient être la surveillance, la journalisation, l'analyse, etc. Vous ne savez jamais au début du projet à quoi ressembleront les exigences dans 1 an, 5 ans, 10 ans. Le changement est inévitable, acceptez-le :-)


28

C'est aussi simple que ça:

Files d'attente = Insérer> Retirer (envoyer à un seul abonné) 1: 1

Topics = Insertion> Diffusion (envoyer à tous les abonnés) 1: n

entrez la description de l'image ici


2
Un exemple peut être pour un simple réseau social. Quelqu'un «aime» un message. Le backend publie un événement 'POST LIKE' dans la rubrique. Il est consommé par 3 abonnés: notificationProcessor(envoie une notification à l'affiche), karmaProcessor(donne du karma au liker et à l'affiche), feedProcessor(déplace les notes vers le haut dans les flux des gens). Le tout de manière asynchrone bien sûr.
Siddhartha

@Siddhartha, cela pourrait être une réponse enveloppée dans un exemple, merci!
selem mn

8

Quant à la conservation des commandes, consultez cette page ActiveMQ . En bref: la commande est conservée pour les consommateurs uniques, mais avec plusieurs consommateurs, l'ordre de livraison n'est pas garanti.


7

Files d'attente

Avantages

  • Modèle de messagerie simple avec un flux de communication transparent
  • Les messages peuvent être récupérés en les remettant dans la file d'attente

Les inconvénients

  • Un seul consommateur peut recevoir le message
  • Implique un couplage entre le producteur et le consommateur car c'est une relation un-à-un

Les sujets

Avantages

  • Plusieurs consommateurs peuvent recevoir un message
  • Découplage entre le producteur et le consommateur (modèle de publication et d'abonnement)

Les inconvénients

  • Flux de communication plus compliqué
  • Un message ne peut pas être récupéré pour un seul auditeur

4

Si vous avez N consommateurs, alors:

Les rubriques JMS remettent des messages à N sur N files d'attente JMS remettent des messages à 1 sur N

Vous avez dit que vous «cherchez à avoir un 'objet' qui enverra une copie du message à chaque abonné dans le même ordre que celui dans lequel le message a été reçu par le courtier ActiveMQ».

Vous souhaitez donc utiliser un thème pour que tous les abonnés N reçoivent une copie du message.


1

TOPIC :: topic is one to many communication ... (multipoint ou publier / s'abonner) EX: -imaginez qu'un éditeur publie le film dans le youtub puis tous ses abonnés recevront une notification .... QUEVE :: queve is one-to -une communication ... Ex: -Lorsque vous publiez une demande de recharge, elle ira à un seul qreciever ... rappelez-vous toujours si la demande est envoyée à tous les qreceivers, puis plusieurs recharges se sont produites lors du développement de l'analyse qui convient à une application


-1

La file d'attente est un objet géré JMS utilisé pour conserver les messages en attente de consommation par les abonnés. Lorsque tous les abonnés ont consommé le message, le message sera supprimé de la file d'attente.

Le sujet est que tous les abonnés à un sujet reçoivent le même message lorsque le message est publié.


2
Les messages de file d'attente ne seront consommés qu'une seule fois par un seul consommateur, c'est pourquoi une file d'attente implémente un équilibreur de charge. Les abonnements à des sujets peuvent être durables : l'abonné peut recevoir le message longtemps après la publication (si l'abonné a été arrêté et revient, par exemple).
Gruber
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.