AMQP

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é

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 par stock.us. et se terminant par un unique élément
      • stock.us.wml: OK
      • stock.us.ocl: OK
      • stock.us.wml.titi.tata: NOK
    • Le dièse #: Utilisable pour représenter une suite de plusieurs éléments
      • stock.us.wml: OK
      • stock.us.ocl: OK
      • stock.us.wml.titi.tata: OK

headers #

  • délivre le message si les headers du binding matchent les headers du message.
  • L’option x-match dans 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 #

rabbitmq schema