0Pricing
RabbitMQ Messaging & Async Systems · Leçon

Module Federation pour la mise en cluster

Découvrez le module Federation pour connecter plusieurs courtiers RabbitMQ en un cluster logique sans réseau complexe. Créez des systèmes de messagerie distribués couvrant plusieurs centres de données.

Module Federation pour la mise en cluster est une leçon RabbitMQ Messaging & Async Systems gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage RabbitMQ Messaging & Async Systems, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours RabbitMQ Messaging & Async Systems comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

What is RabbitMQ Federation?

Imagine you have RabbitMQ brokers in different data centers or cloud regions. How do they share messages without complex network setups?

The Federation plugin allows you to loosely connect these brokers. It enables messages to flow between them, creating a distributed messaging system across geographical boundaries.

Federation vs. Traditional Clustering

It's important to distinguish Federation from traditional RabbitMQ clustering:

  • Clustering: Tightly couples nodes, sharing state and data. Best for high availability within a single, low-latency network (e.g., a data center).
  • Federation: Loosely connects brokers by replicating messages. Ideal for spanning wide area networks (WANs) or connecting brokers managed by different teams. It doesn't share state like a cluster.

Key Components: Upstreams & Policies

Federation relies on two main concepts:

  • Upstreams: These define the source broker from which messages will be pulled. An upstream specifies the connection details (like URI) of the remote RabbitMQ instance.
  • Policies: These rules determine which exchanges or queues on your downstream broker should connect to which upstream broker. They use regular expressions to match names.

Enabling the Federation Plugin

Before you can use federation, you need to enable the plugin on all participating RabbitMQ brokers. This is done using the RabbitMQ command-line tool.

Run this command on each broker:

rabbitmq-plugins enable rabbitmq_federation rabbitmq_federation_management

Configuring an Upstream Link

An 'upstream' tells your local broker where to pull messages from. You define it using the rabbitmqctl set_parameter command.

This example sets up an upstream named 'my-upstream' pointing to a remote broker:

rabbitmqctl set_parameter federation-upstream my-upstream \
'{"uri":"amqp://guest:guest@remote-host:5672","expires":3600000}'

Creating a Federation Policy for Exchanges

Once an upstream is defined, you apply it to exchanges using a policy. This policy tells your local broker to federate messages for matching exchanges from the specified upstream.

This policy federates all exchanges starting with 'fed.' from 'my-upstream':

rabbitmqctl set_policy --apply-to exchanges \
fed-exchanges ".^fed\\..*" \
'{"federation-upstream":"my-upstream"}'

How Federated Exchanges Work

With a federated exchange:

  • A producer publishes messages to an exchange on the upstream broker.
  • The federation plugin on the downstream broker pulls these messages from the upstream exchange.
  • The messages then arrive at the corresponding federated exchange on the downstream broker, where local consumers can receive them.

The consumer only interacts with its local (downstream) broker.

Client Example: Consuming from Federated Exchange

Here's a Python consumer that connects to a downstream broker and receives messages from a federated exchange. It doesn't need to know the messages originated from an upstream broker.

To run this, ensure you have pika installed (pip install pika).

import pika
import sys
import os

def main():
    # Connect to the local (downstream) RabbitMQ broker
    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
    channel = connection.channel()

    # Declare the exchange that is federated from an upstream broker
    # (e.g., using the policy created in previous steps for 'fed_logs')
    channel.exchange_declare(exchange='fed_logs', exchange_type='fanout', durable=True)

    result = channel.queue_declare(queue='', exclusive=True)
    queue_name = result.method.queue

    channel.queue_bind(exchange='fed_logs', queue=queue_name)

    print(' [*] Waiting for federated messages. To exit press CTRL+C')

    def callback(ch, method, properties, body):
        print(f" [x] Received: {body.decode()}")

    channel.basic_consume(queue=queue_name, on_message_callback=callback, auto_ack=True)
    channel.start_consuming()

if __name__ == '__main__':
    try:
        main()
    except KeyboardInterrupt:
        print(' Interrupted')
        try:
            sys.exit(0)
        except SystemExit:
            os._exit(0)

Federating Queues

You can also federate queues. When a queue is federated, messages published to that queue on the upstream broker will be pulled and added to the corresponding queue on the downstream broker.

The policy setup is very similar, just specify --apply-to queues:

rabbitmqctl set_policy --apply-to queues \
fed-queues ".^fed\\..*" \
'{"federation-upstream":"my-upstream"}'

Quick Check on Federation

Which of the following best describes the primary use case for RabbitMQ Federation?

Recap: Federation for Distributed Messaging

In this lesson, you learned about the RabbitMQ Federation plugin:

  • It allows you to connect RabbitMQ brokers across different locations.
  • It uses upstreams to define source brokers and policies to apply federation rules.
  • Federation differs from clustering by offering loose coupling, suitable for WANs.
  • You can federate both exchanges and queues, enabling flexible message distribution in a distributed system.

This powerful plugin helps you build robust, geographically distributed messaging architectures.

Questions Fréquemment Posées

La leçon « Module Federation pour la mise en cluster » est-elle gratuite ?

Oui — le texte complet de « Module Federation pour la mise en cluster » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours RabbitMQ Messaging & Async Systems, passe à CoddyKit PRO. Le cours RabbitMQ Messaging & Async Systems comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Module Federation pour la mise en cluster » ?

Découvrez le module Federation pour connecter plusieurs courtiers RabbitMQ en un cluster logique sans réseau complexe. Créez des systèmes de messagerie distribués couvrant plusieurs centres de donnée… Tu pratiques RabbitMQ Messaging & Async Systems avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer RabbitMQ Messaging & Async Systems ?

Aucune expérience préalable n'est requise. RabbitMQ Messaging & Async Systems sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Module Federation pour la mise en cluster » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon RabbitMQ Messaging & Async Systems ?

Oui. Chaque leçon RabbitMQ Messaging & Async Systems inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Module des messages différés
  2. Module Shovel pour la fédération
  3. Module Federation pour la mise en cluster
  4. Déduplication des messages et extensions d’échange par hachage cohérent
← Retour à RabbitMQ Messaging & Async Systems