RabbitMQ - Solution Message-Oriented Middleware


Types de routage

Introduction

Le modèle AMQP comporte quatre types d'exchange, qui conduisent à quatre types de routage différents. Ils sont les suivants :

Il existe aussi le default exchange, qui utilise le nom d'une queue en tant que nom de sa binding key. Si le producteur envoie un message à l'exchange par défaut et que le nom de la routing key correspond au nom d'une queue, alors le message est stocké dans cette queue. L'exchange par défaut ne comporte pas de nom, et est par conséquent attaché à toutes les queues.
La motivation d'un choix pour l'un de ces types se fait en fonction de l'objectif de chacun, dont trois sont décrits précisément ci-dessous.



Direct

Le type d'exchange direct caractérise typiquement une relation de communication 1:1 ou encore unicast, c'est-à-dire que pour un message envoyé, un unique consommateur recevra ce message.

Le fonctionnement de cet exchange est simple. Le message, envoyé par le producteur au broker, contient une routing key. Cette clé est une simple string qui indique le type de routage. Dans ce type d'exchange, le binding spécifie une binding key, et alors l'exchange aiguille le message à une de ces queues attachées, si la routing key correspond à l'identique à la binding key.



Fanout

Le type d'exchange fanout caractérise typiquement une relation de communication 1:n ou encore broadcast, c'est-à-dire que pour un message envoyé, tous les consommateurs recevront ce message.

Ce type d'exchange ne définit pas de routing key au sein de ses messages. L'exchange aiguille donc les messages à toutes les queues auxquelles il est attaché.



Topic

Le type d'exchange topic caractérise typiquement une relation de communication 1:n (voire n:m) ou encore multicast, c'est-à-dire que pour un message envoyé, plusieurs consommateurs recevront ce message.

Le fonctionnement de cet exchange est similaire à celui du direct exchange, sauf que les bindings keys sont représentées par des caractères wildcard ("*","#"). Le routage des messages par l'exchange se fait encore par la correspondance entre la routing key et la binding key. Au contraire du principe du direct exchange, un message peut être stocké dans plusieurs queues grâce à l'utilisation de wildcard.