AMQP #
- Advanced Message Queuing Protocol
- Focuses on process-to-process communication across IP networks.
- Enable passing message through broker services over TCP/IP connections
- Binary protocol
Différence AMQP et HTTP #
Avec HTTP, le client est bloqué jusqu’à l’obtention d’une réponse du serveur
Broker #
- Module qui traduit un message d’un protocole à un autre.
- Quand celui qui envoie et qui reçoit utilise des protocoles de messages différents
- Son rôle est de transporter et router les messages depuis les publishers vers les consumers
Message #
Le message est comme une requête HTTP, il contient des attributs ainsi qu’un payload
Liste des properties du protocol content_type, content_encoding, priority, correlation_id, reply_to, expiration, message_id, timestamp, type, user_id, app_id, cluster_id
Les headers seront disponibles dans attributes[headers]
Message acknowledgment: Used to confirm message delivery and/or processing
Producer (Producteur) #
Celui qui envoie le message
Exchange #
- Liste de publication des messages
- L’endroit où un message est déposé par un producer
- Peut être marquée comme:
- durable: Survives a broker restart
- auto-delete: It’s automatically deleted when the last queue is unbound
https://www.cloudamqp.com/blog/part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html
fanout #
- Relation de communication 1:n
- Le message est transmis à toutes les queues
direct (default) #
-
Relation de communication 1:1
-
Le message est transmis à une seule queue identifiée
Routing key / Binding key
- Chaque binding pourra définir sa propre Binding key (Ex:
stock.us.vmw) - Les Routing key sont défini au niveau des messages
- Si le Binding key et le Routing key corresponde, le message est envoyé à la queue correspondante
- Sinon, le message est ignoré
- Chaque binding pourra définir sa propre Binding key (Ex:
topic #
-
Relation de communication 1:n
-
Le message est transmis à plusieurs consommateurs filtrés
Wildcards
- L’astérisque * : Par exemple une binding key
stock.us.*pourrait représenter toutes les routing-key commençant parstock.us.et se terminant par un unique élémentstock.us.wml: OKstock.us.ocl: OKstock.us.wml.titi.tata: NOK
- Le dièse #: Utilisable pour représenter une suite de plusieurs éléments
stock.us.wml: OKstock.us.ocl: OKstock.us.wml.titi.tata: OK
- L’astérisque * : Par exemple une binding key
headers #
- délivre le message si les headers du binding matchent les headers du message.
- L’option
x-matchdans le binding permet de définir si un seul header ou tous doivent matcher.- x-match = any: le message sera délivré si un seul des headers du binding correspond à un header du message
- x-match = all: le message sera délivré si tous les headers du binding correspondent aux headers du message.
Queue #
- Liste de lecture des messages
- Le message est dirigé vers la queue par l’exchange
- Peut être marquée comme:
- durable
- auto-delete
- exclusive: It can be used by only one connection and this queue will be deleted when that connection closes
Binding #
- Le chemin qui sera pris par le message est définit par un ou des binding (liaison) entre un exchange et une/des queues
Consumer #
- Celui qui reçoit les messages qui sont dans les queues
Connection #
A connection in AMQP 0.9.1 is a network connection between your application and the AMQP broker, e.g. a TCP/IP socket connection.
Channel #
A channel is a virtual connection inside a connection, between two AMQP peers. Message publishing or consuming to or from a queue is performed over a channel (AMQP). A channel is multiplexed, one single connection can have multiple channels.
https://www.cloudamqp.com/blog/the-relationship-between-connections-and-channels-in-rabbitmq.html
Schema #
