2017-10-05 9 views
0

J'essaie de comprendre en profondeur comment fonctionne la communication API Push entre le client et le serveur RabbitMQ. Comme je sais - mais corrigez-moi au cas où - le client ouvre une connexion TCP au courtier (RabbitMQ) et maintient cette connexion jusqu'à la décision du client de la fermer. Mais au cours de cette connexion, le client peut recevoir des messages immédiatement. Ma question est, pendant cette connexion, que le client surveille le courtier pour lui demander des messages, ou quand le courtier transmet un message à la file d'attente, où le client a souscrit, il suffit de prendre cette connexion et de pousser les données vers le client?AMQP, API RabbitMQ Push comment ça marche?

premier cas: client surveiller le courtier pour les messages

dernier cas: le client n'a pas besoin de surveiller le courtier, courtier il suffit de pousser les données

ou autre?

+0

Si vous voulez vraiment obtenir des informations correctes sur la façon dont l'AMPQ fonctionne, je recommande fortement de commencer par [lire la spécification] (http://docs.oasis-open.org/amqp/core/v1.0/amqp- core-complete-v1.0.pdf) au lieu d'essayer d'imaginer comment la chose pourrait fonctionner ... – fvu

Répondre

1

Il y a deux options pour recevoir des messages

  1. Le client enregistre un rappel à la consommation (basicConsume) sur le canal; le courtier «pousse» ensuite les messages au consommateur.

  2. Le client envoie au courtier un basicGet et reçoit un message (s'il est présent).

Le premier cas d'utilisation est le plus courant.

Depuis que vous avez tagué la question avec Je suppose que vous êtes intéressant au printemps. Dans le premier cas, Spring AMQP a un conteneur d'écoute (et @RabbitListener annotation); Dans le second cas, l'une des opérations de réception RabbitTemplate peut être utilisée.

Je vous suggère de regarder le tutorials pour avoir une compréhension de base. Ils couvrent plusieurs langues, y compris pure Java et Spring AMQP.

Vous pouvez également consulter le Spring AMQP Reference Manual.