RabbitMQ este cel mai larg adoptat și de încredere broker tradițional de mesagerie (Message Broker) open-source din lume, implementând standardul industrial AMQP (Advanced Message Queuing Protocol). Spre deosebire de Kafka (care funcționează ca un jurnal de streaming continuu), RabbitMQ este un broker inteligent cu consumatori simpli: este conceput special pentru rutarea flexibilă și granulară a fiecărui mesaj individual, garanții stricte de confirmare și sarcini de fundal distribuite (Background Task Queues).
De la microservicii asincrone care procesează plăți, transcodare media sau trimitere de email-uri, până la sisteme critice din telecomunicații și sănătate, RabbitMQ oferă o flexibilitate de rutare inegalabilă prin intermediul Exchange-urilor, a cozilor de mare rezistență Quorum Queues (bazate pe consens Raft) și a mecanismelor de Dead Lettering (DLX).
# Producător (Publisher)
# │ (Trimite mesaj cu Routing Key: 'order.created')
# ▼
# ┌─────────────────────────────────────────────────────────────┐
# │ Exchange (ex: 'orders_exchange' - Tip Topic) │
# └──────┬──────────────────────────────────────────────┬───────┘
# │ (Binding: 'order.*') │ (Binding: '*.critical')
# ▼ ▼
# ┌───────────────────────────┐ ┌───────────────────────────┐
# │ Queue: 'billing_service' │ │ Queue: 'audit_logger' │
# └─────────────┬─────────────┘ └─────────────┬─────────────┘
# ▼ ▼
# Consumator Billing Consumator Audit
Pilonii Tehnologici ai RabbitMQ
| Concept AMQP | Mecanism Tehnic | Rol în Producție |
|---|---|---|
| Direct Exchange | Rutează mesajul doar către coada al cărei Binding Key este identic cu Routing Key-ul. | Procesare dedicată de sarcini țintite către un anumit tip de worker. |
| Fanout Exchange | Ignoră Routing Key-ul și transmite mesajul în paralel către toate cozile legate. | Modele Publish/Subscribe (broadcast de evenimente către multiple subsisteme). |
| Topic Exchange | Rutează pe baza potrivirilor de tipar cu wildcard: * (un cuvânt) sau # (zero sau mai multe). |
Rutare contextuală sofisticată (ex: eu.orders.payments.urgent). |
| Quorum Queues | Cozi replicate distribuit pe multiple noduri de cluster folosind algoritmul Raft. | Înlocuiește vechile Mirrored Queues, garantând zero pierderi de mesaje și recuperare automată. |
import pika
# 1. Conectare la brokerul RabbitMQ:
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 2. Declararea unei cozi durabile (rezistentă la restart server):
channel.queue_declare(queue='task_queue', durable=True)
# 3. Publicarea unui mesaj cu persistență pe disc:
channel.basic_publish(
exchange='',
routing_key='task_queue',
body='Procesează factura #90812',
properties=pika.BasicProperties(
delivery_mode=pika.DeliveryMode.Persistent
)
)
print(" [x] Mesaj expediat cu succes!")
connection.close()