RabbitMQ 7.0.0 Neler Getiriyor?
RabbitMQ 7.0.0, mesaj kuyruk sistemleri arasında en popüler çözümlerden biri olan RabbitMQ’nun en güncel sürümüdür. Bu sürüm, performans iyileştirmeleri, güvenlik güncellemeleri ve cluster yönetiminde önemli geliştirmeler içermektedir:
- Quorum kuyrukları için geliştirilmiş performans
- Daha güçlü akış kontrolü mekanizmaları
- Stream özellikleri için iyileştirmeler
- Daha iyi cluster yönetim araçları
- Daha düşük bellek kullanımı
Cluster Kurulumu Adımları
1. Ön Gereksinimler
Her düğümde şu bileşenlerin kurulu olması gerekir ;
# Erlang/OTP 25.0 veya üstü
# RabbitMQ 7.0.0
# Synchronize edilmiş saat ayarları
# Düğümler arası erişilebilir ağ bağlantısı
# Erlang/OTP 25.0 veya üstü # RabbitMQ 7.0.0 # Synchronize edilmiş saat ayarları # Düğümler arası erişilebilir ağ bağlantısı
2. Erlang Cookie Yapılandırması
Tüm düğümlerde aynı Erlang cookie değerinin olması gereklidir:
# Erlang cookie dosyası konumu: # Windows: %HOMEDRIVE%%HOMEPATH%\.erlang.cookie # Linux/macOS: /var/lib/rabbitmq/.erlang.cookie veya $HOME/.erlang.cookie # Örnek cookie oluşturma ve dağıtma: echo "ABCDEFGHIJKLMNOPQRSTUVWXYZ1234" > /var/lib/rabbitmq/.erlang.cookie chmod 400 /var/lib/rabbitmq/.erlang.cookie chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie
3. İlk Düğümü Başlatma
# rabbitmq-server başlatma systemctl start rabbitmq-server # Durumu kontrol etme rabbitmqctl status
4. Diğer Düğümleri Kümeye Dahil Etme
# İkinci düğümde çalıştırın (rabbit@node2): rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@node1 rabbitmqctl start_app # Üçüncü düğümde çalıştırın (rabbit@node3): rabbitmqctl stop_app rabbitmqctl reset rabbitmqctl join_cluster rabbit@node1 rabbitmqctl start_app
5. Cluster Durumunu Kontrol Etme
rabbitmqctl cluster_status
Yüksek Erişilebilirlik Yapılandırması
Quorum Kuyrukları Kullanımı
RabbitMQ 7.0.0’da yüksek erişilebilirlik için quorum kuyrukları tercih edilmelidir:
# Quorum kuyruğu oluşturma rabbitmqadmin declare queue name=kritik-kuyruk queue_type=quorum durable=true \ arguments='{"x-quorum-initial-group-size":3}'
Politika Tanımlama
Web yönetim arayüzünden veya komut satırından politikalar tanımlanabilir:
# Tüm kuyruklar için quorum kuyruğu politikası tanımlama rabbitmqctl set_policy ha-all "^" \ '{"queue-type":"quorum","ha-mode":"all","ha-sync-mode":"automatic"}' \ --apply-to queues
.NET Core ile RabbitMQ Cluster Bağlantı Örneği
using RabbitMQ.Client; using RabbitMQ.Client.Events; using System; using System.Text; public class RabbitMQService { private readonly ConnectionFactory _factory; public RabbitMQService() { _factory = new ConnectionFactory { // Cluster düğümlerini tanımlama HostName = "rabbit-master", // Ana düğüm Port = 5672, UserName = "admin", Password = "guclu_parola", VirtualHost = "/", AutomaticRecoveryEnabled = true, TopologyRecoveryEnabled = true, // Fail-over için diğer düğümleri tanımlama EndpointResolverFactory = endpoints => { var hostnames = new[] { "rabbit-master", "rabbit-node2", "rabbit-node3" }; return new DefaultEndpointResolver(hostnames.Select(h => new AmqpTcpEndpoint(h, 5672)).ToList()); } }; } public void PublishMessage(string exchangeName, string routingKey, string message) { using (var connection = _factory.CreateConnection("UygulamaAdi")) using (var channel = connection.CreateModel()) { var properties = channel.CreateBasicProperties(); properties.Persistent = true; // Mesajların kalıcı olmasını sağlar var body = Encoding.UTF8.GetBytes(message); channel.BasicPublish( exchange: exchangeName, routingKey: routingKey, basicProperties: properties, body: body); Console.WriteLine($"Mesaj gönderildi: {message}"); } } }
Kaynakça
https://www.rabbitmq.com/docs/clustering
https://kisztof.medium.com/building-a-high-availability-rabbitmq-cluster-27d0eb67938