RabbitMQ

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 (STOMP) et Message Queuing Telemetry Transport (MQTT). Le serveur RabbitMQ est écrit dans le langage de programmation Erlang.

RabbitMQ

Informations
Développé par Pivotal Software (en)
Dernière version 3.8.17 ()[1]
Dépôt github.com/rabbitmq/rabbitmq-server
Écrit en Erlang
Système d'exploitation Multiplateforme
Type Agent de messages
Licence Mozilla Public License
Site web www.rabbitmq.com

Historique

RabbitMQ fut 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 par SpringSource (en), une division de VMware[3].

En , il incorpora Pivotal Software[4].

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

Composants

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 des 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

Python

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

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

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()

Producteur

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

// 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

  1. « Release 3.8.17 », (consulté le )
  2. « Launch of RabbitMQ Open Source Enterprise Messaging », Press release, (lire en ligne, consulté le )
  3. « Rabbit Technologies announce acquisition by SpringSource », Press release, (lire en ligne [archive du ], consulté le )
  4. « Proudly part of Pivotal », Press release, (lire en ligne [archive du ], consulté le )
  5. « Messaging that just works — RabbitMQ », sur www.rabbitmq.com
  6. (en) « RabbitMQ - RabbitMQ tutorial - "Hello world!" », sur www.rabbitmq.com (consulté le )
  7. « RabbitMQ tutorial - "Hello World!" — RabbitMQ », sur www.rabbitmq.com
  • Portail de l’informatique
  • Portail des logiciels libres
Cet article est issu de Wikipedia. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.