RabbitMQ

Un article de Wikipédia, l'encyclopédie libre.
Sauter à la navigation Sauter à la recherche
RabbitMQ
Description de l'image Rabbitmq logo.png.

Informations
Développé par Pivotal Software (en)Voir et modifier les données sur Wikidata
Dernière version 3.7.9 ()[1]Voir et modifier les données sur Wikidata
Dépôt github.com/rabbitmq/rabbitmq-serverVoir et modifier les données sur Wikidata
Écrit en ErlangVoir et modifier les données sur Wikidata
Système d'exploitation MultiplateformeVoir et modifier les données sur Wikidata
Type Agent de messagesVoir et modifier les données sur Wikidata
Licence Mozilla Public LicenseVoir et modifier les données sur Wikidata
Site web www.rabbitmq.com et www.rabbitmq.comVoir et modifier les données sur Wikidata

RabbitMQ est un logiciel d'agent de messages open source qui implémente le protocole Advanced Message Queuing (AMQP), mais aussi avec des plugins Streaming Text Oriented Messaging Protocol (en) (STOMP) et Message Queuing Telemetry Transport (en) (MQTT). Le serveur RabbitMQ est écrit dans le langage de programmation Erlang.

Historique[modifier | modifier le code]

RabbitMQ fût initialement développé par Rabbit Technologies Ltd., une société créée conjointement par LShift et CohesiveFT en 2007[2], avant d'être acquis en avril 2010 par SpringSource (en), une division de VMware[3].

En mai 2013, il incorpora Pivotal Software[4].

En 2018, il est utilisé dans plus de 35 000 entreprises[5].

Composants[modifier | modifier le code]

Le projet est constitué de :

  • Un serveur d'échange RabbitMQ.
  • Des passerelles pour protocoles AMQP, HTTP, STOMP, et MQTT.
  • Des bibliothèques de client AMQP pour Java, .NET Framework, et Erlang (mais d'autres ont été développés par de tiers).
  • Une plateforme de plugin avec une collection prédéfinie, incluant :
    • "Shovel" : réplication de messages entre les agents de messages.
    • "Federation" : partage de messages entre les agents (au niveau exchange).
    • "Management" : monitoring et contrôle des agents et de leurs groupes.

Exemples d'utilisation[modifier | modifier le code]

Python[modifier | modifier le code]

Cette section propose des exemples de programmes écrits en Python pour l'envoi et la réception de messages à l'aide d'une file d'attente.

Envoi[modifier | modifier le code]

Envoi d'un message dans une queue[6] :

#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()

Réception[modifier | modifier le code]

Réception du message[6] :

#!/usr/bin/env python
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
print(' [*] Waiting for messages. To exit press CTRL+C')
def callback(ch, method, properties, body):
    print(" [x] Received %r" % body)
channel.basic_consume(callback, queue='hello', no_ack=True)
channel.start_consuming()

PHP[modifier | modifier le code]

Producteur[modifier | modifier le code]

L'exemple suivant envoie un message JSON directement dans une queue, sans passer par un bus d'échange[7].

// Création d'une queue persistante où empiler les messages :
$channel->queue_declare('ma_queue_1', false, true, false, false);
// Création du message
$message = new AMQPMessage('Hello World!');
// Envoi du message dans la queue
$channel->basic_publish(json_encode($message), '', 'ma_queue_1');

Consommateur[modifier | modifier le code]

// Fonction de traitement de chaque message
$callback = function ($message) {
  var_dump($message);
};
// Récupération du message de la queue (ce qui le supprime)
$channel->basic_consume('ma_queue_1', '', false, true, false, false, $callback);

Références[modifier | modifier le code]

  1. « Release 3.7.9 » (consulté le 17 novembre 2018)
  2. « Launch of RabbitMQ Open Source Enterprise Messaging », Press release,‎ (lire en ligne)
  3. « Rabbit Technologies announce acquisition by SpringSource », Press release,‎ (lire en ligne[archive du ])
  4. « Proudly part of Pivotal », Press release,‎ (lire en ligne[archive du ])
  5. https://www.rabbitmq.com/#getstarted
  6. a et b (en) « RabbitMQ - RabbitMQ tutorial - "Hello world!" », sur www.rabbitmq.com (consulté le 22 novembre 2017)
  7. https://www.rabbitmq.com/tutorials/tutorial-one-php.html