İLERİ
Federation & Shovel (Multi-DC)
Birden fazla datacenter'ın (İstanbul + Frankfurt gibi) birbiriyle mesaj paylaşması gerektiğinde ne yaparsın? RabbitMQ cluster'ı farklı şehirler arası çalışamaz (ağ gecikmesine dayanamaz).
Seviye: İleri — Multi-DC mimari bilgisi ve network topolojisi deneyimi gerektirir.
📖 Teknik detay: Clustering LAN-only'dir. WAN için: Federation (exchange/queue seviyesinde çoğaltma) veya Shovel (queue→queue tek yönlü aktarım) kullanılır.
Federation vs Shovel
| Özellik | Federation | Shovel |
|---|---|---|
| Seviye | Exchange veya Queue | Queue-to-queue (veya exchange) |
| Yön | Pull (downstream, upstream'den çeker) | Push (source'dan destination'a iter) |
| Topology | Declarative (policy-based) | Explicit (per-shovel config) |
| Cluster-aware | Failover built-in | Reconnect built-in |
| Use case | Multi-DC event distribution, hierarchical topology | Basit queue forwarding, migration |
| Complexity | Orta (policy + upstream tanımı) | Düşük (source + destination URI) |
| Loop prevention | Built-in (max-hops) | Manuel yönetilmeli |
Ne Zaman Kullan
| Senaryo | Çözüm | Neden |
|---|---|---|
| Multi-DC event replication | Federation (Exchange) | Her DC'de local consumer, upstream'den event pull |
| Active-active multi-region | Federation (bidirectional) | Her site publish + consume, loop prevention ile |
| Queue migration (cluster arası) | Shovel | Basit A→B forwarding, geçici kullanım |
| Farklı vhost'lar arası mesaj taşıma | Shovel veya Federation | Aynı cluster içi bile olabilir |
| Aynı LAN, HA gereksinimi | Clustering + Quorum | Federation/Shovel gereksiz overhead |
# 1. Federation plugin aktifleştir (her node'da)
rabbitmq-plugins enable rabbitmq_federation
rabbitmq-plugins enable rabbitmq_federation_management
# 2. Upstream tanımla (downstream cluster'da çalıştır)
rabbitmqctl set_parameter federation-upstream dc1-upstream '{"uri":"amqps://federation-user:pass@dc1-rabbitmq.example.com:5671?cacertfile=/certs/ca.pem&certfile=/certs/client.pem&keyfile=/certs/client-key.pem","expires":3600000,"reconnect-delay":5}'
# 3. Policy ile federation'ı aktifleştir
rabbitmqctl set_policy federate-orders "^orders." '{"federation-upstream-set":"all"}' --apply-to exchanges --priority 10
# 4. Federation link durumunu kontrol et
rabbitmqctl federation_status
# Dynamic Shovel tanımla
rabbitmqctl set_parameter shovel migrate-orders '{"src-protocol":"amqp091","src-uri":"amqp://oldcluster.internal","src-queue":"legacy-orders","dest-protocol":"amqp091","dest-uri":"amqp://newcluster.internal","dest-queue":"orders-v2","reconnect-delay":5,"ack-mode":"on-confirm"}'
# Shovel durumunu kontrol et
rabbitmqctl shovel_status
# Shovel'ı kaldır
rabbitmqctl clear_parameter shovel migrate-orders
Federation ≠ Clustering: Federation asenkron çalışır, strong consistency garanti etmez. Aynı mesaj birden fazla DC'de bulunabilir (eventual consistency). Ordering garantisi yoktur. Business logic'in buna uygun olması gerekir.
Gerçek hayat senaryosu: Multi-region e-ticaret: Europe DC (primary) + US-East DC (secondary). Order event'leri Europe'da publish edilir. US-East DC federation ile bu event'leri pull eder ve local analytics/recommendation servislerini besler. Europe çökerse US-East cached data ile read-only devam eder.