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://medium.com/swlh/configuring-an-nginx-tcp-proxy-for-my-rabbitmq-cluster-under-10-minutes-a0731ec6bfaf

https://www.rabbitmq.com/docs/clustering

https://kisztof.medium.com/building-a-high-availability-rabbitmq-cluster-27d0eb67938

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir