RabbitMQ est un logiciel d'agent de messages open source qui met en œuvre le protocole Advanced Message Queuing (AMQP), mais fonctionne 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
Description de l'image RabbitMQ logo.svg.
Description de l'image Grafana dashboard for MusicBrainz RabbitMQ screenshot.webp.
Informations
Développé par Jean-Sébastien Pédron (d), Michael Klishin (d), Hubert Plociniczak (d) et Matthias Radestock (d)Voir et modifier les données sur Wikidata
Dernière version 4.3.1 (20 mai 2026)[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 Multiplateforme (d)Voir et modifier les données sur Wikidata
Type Agent de messagesVoir et modifier les données sur Wikidata
Licence MPL-2.0Voir et modifier les données sur Wikidata
Site web www.rabbitmq.comVoir et modifier les données sur Wikidata

Historique

modifier

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

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

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

Composants

modifier

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 module d'extension 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" : surveillance et contrôle des agents et de leurs groupes.

Exemples d'utilisation

modifier

Python

modifier

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

Envoi d'un message dans une file d'attente[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

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

Producteur

modifier

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

// Création d'une file d'attente persistante où empiler les messages :
$channel->queue_declare('ma_file_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_file_1');

Consommateur

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

Articles connexes

modifier

Références

modifier
  1. « Release 4.3.1 », 20 mai 2026 (consulté le 20 mai 2026)
  2. « Launch of RabbitMQ Open Source Enterprise Messaging », Press release,‎ 8 février 2007 (lire en ligne, consulté le 23 octobre 2013)
  3. « Rabbit Technologies announce acquisition by SpringSource », Press release,‎ 13 avril 2010 (lire en ligne [archive du 18 avril 2010], consulté le 3 octobre 2013)
  4. « Proudly part of Pivotal », Press release,‎ 14 mai 2010 (lire en ligne [archive du 2 juin 2013], consulté le 3 octobre 2013)
  5. « Messaging that just works — RabbitMQ », sur www.rabbitmq.com
  6. a et b (en) « RabbitMQ - RabbitMQ tutorial - "Hello world!" », sur www.rabbitmq.com (consulté le 22 novembre 2017)
  7. « RabbitMQ tutorial - "Hello World!" — RabbitMQ », sur www.rabbitmq.com

📚 Artikel Terkait di Wikipedia

Gtkmm

gestion des signaux et le "branchement" des fonctions de rappel (callback functions) avec la bibliothèque libsigc++ (a signal/slots system). gtk—est également

Fonction de rappel

length, int (*callback)(int index, int item, void *param), void *param) { int exitCode = 0; for (int i = 0; i < length; i++) { exitCode = callback(i, array[i]

Visual Basic for Applications

dans la bibliothèque de fonction (Insertion / Fonction / Personnalisée) : Function NomFonction (Argument1, Argument2 As TypeDonnées, Optional Argument3=valeur_defaut)

Mutex réentrant

une fonction qui verrouillerait et exécuterait un callback, est elle-même appelée par un callback, un interblocage en résulterait. En pseudo-code, nous

Enigma (jeu vidéo, 2002)

pour qu'à son contact, il lance (callback) la fonction lua appelée "GimmeMoney()": ti["i"] = {"st_switch",action="callback",target="GimmeMoney"} Ce jeu utilise

Voicemeeter

updates Voicemeeter to v1.0.5.6 and v2.0.3.6 (Banana) with new remoting functions », sur kvraudio.com (consulté le 24 décembre 2017) (en) « KVR: VB-Audio

Système d'exploitation pour capteur en réseau

L’économie d’énergie est réalisée par Mantis par une fonction de veille (sleep function) qui inactive le capteur lorsque tous les threads actifs sont terminés