RabbitMQ Sunucu Kurulumu ve Güvenli Mesaj Kuyruğu Yönetimi

RabbitMQ Sunucu Kurulumu ve Güvenli Mesaj Kuyruğu Yönetimi - Corelux
Paylaş:

RabbitMQ Sunucu Kurulumu ve Güvenli Mesaj Kuyruğu Yönetimi

Son Güncelleme: Haziran 2026

RabbitMQ, web uygulamaları, mikroservisler ve arka plan görevleri arasında güvenilir iletişim kurmak için kullanılan güçlü bir mesaj kuyruğu sistemidir. Bu rehberde RabbitMQ’nun ne işe yaradığını, Linux sunucuda nasıl kurulacağını, güvenli şekilde nasıl yapılandırılacağını ve üretim ortamında hangi performans ayarlarının dikkate alınması gerektiğini adım adım ele alacağız.

İçindekiler

RabbitMQ Nedir?

RabbitMQ, uygulamalar arasında mesaj alışverişi yapmak için kullanılan açık kaynaklı bir message broker yani mesaj aracısıdır. Bir uygulama mesajı doğrudan başka bir uygulamaya göndermek yerine RabbitMQ’ya iletir; RabbitMQ da bu mesajı ilgili kuyrukta saklar ve uygun tüketiciye ulaştırır. Bu yapı, yoğun trafik altında sistemlerin daha dayanıklı, esnek ve ölçeklenebilir çalışmasını sağlar.

RabbitMQ, özellikle AMQP yani Advanced Message Queuing Protocol standardını desteklemesiyle bilinir. Bunun yanında farklı eklentiler aracılığıyla MQTT ve STOMP gibi protokollerle de çalışabilir. Bu özellik, RabbitMQ’yu hem klasik web uygulamaları hem de IoT, bildirim servisleri, finansal işlem sistemleri ve mikroservis mimarileri için uygun hale getirir.

Basit bir örnekle açıklamak gerekirse, bir e-ticaret sitesinde müşteri sipariş verdiğinde aynı anda fatura oluşturma, e-posta gönderme, stok güncelleme ve kargo entegrasyonu gibi işlemler tetiklenebilir. Bu işlemlerin tamamını kullanıcı sipariş ekranında beklerken çalıştırmak yerine RabbitMQ kuyruğuna görev olarak eklemek, uygulamanın daha hızlı yanıt vermesini sağlar.

RabbitMQ Ne Zaman Kullanılır?

RabbitMQ her projede zorunlu değildir; ancak uygulamanız büyüdükçe arka plan işlemlerini yönetmek, servisler arası iletişimi düzenlemek ve ani trafik artışlarında veri kaybını azaltmak için önemli bir altyapı bileşenine dönüşür.

  • Arka plan görevleri: E-posta gönderimi, rapor üretimi, PDF oluşturma, görsel işleme ve toplu veri aktarımı gibi zaman alan işlemler kuyruk üzerinden çalıştırılabilir.
  • Mikroservis iletişimi: Sipariş, ödeme, stok ve bildirim servisleri birbirlerine doğrudan bağımlı olmadan mesajlaşabilir.
  • Trafik dalgalanmaları: Ani istek artışlarında uygulama mesajları kuyruğa alarak işlemleri kontrollü şekilde tüketebilir.
  • Hata toleransı: Tüketici servis geçici olarak kapalı olsa bile mesajlar kuyrukta bekleyebilir.
  • Asenkron işlem: Kullanıcıya hızlı yanıt verilmesi gereken sistemlerde ağır işlemler arka plana taşınabilir.

Örneğin Laravel, Symfony, Node.js, Python veya Go ile geliştirilen uygulamalarda RabbitMQ, iş kuyruğu ve olay tabanlı mimari için sık kullanılan çözümlerden biridir. Uygulamanız için izole ve yönetilebilir bir altyapı istiyorsanız Sanal Sunucu veya daha yüksek kaynak gerektiren yapılarda Kiralık Sunucu tercih edebilirsiniz.

Sunucu Gereksinimleri ve Mimari Planlama

RabbitMQ hafif bir servis gibi görünse de yoğun mesaj trafiğinde bellek, disk ve ağ kaynaklarını dikkatli kullanır. Özellikle kalıcı mesajlar, yüksek bağlantı sayısı ve büyük kuyruklar söz konusu olduğunda doğru sunucu planlaması kritik hale gelir.

Minimum ve Önerilen Kaynaklar

Kullanım Tipi CPU RAM Disk Önerilen Ortam
Test ve geliştirme 1 vCPU 1-2 GB 20 GB SSD VPS veya küçük VDS
Küçük üretim ortamı 2 vCPU 4 GB 40 GB SSD/NVMe VDS
Orta ölçekli uygulama 4 vCPU 8-16 GB NVMe disk VDS veya bulut sunucu
Yüksek trafik ve kritik sistem 8+ CPU 16+ GB NVMe RAID Kiralık sunucu veya cluster

Mimari Planlama İpuçları

  • Mesaj boyutu: RabbitMQ küçük ve orta boyutlu mesajlar için daha verimlidir. Büyük dosyalar kuyruğa konmak yerine nesne depolama veya dosya sistemi üzerinde tutulmalı, kuyrukta sadece referans bilgisi taşınmalıdır.
  • Disk tipi: Kalıcı mesajlar için hızlı SSD veya NVMe disk kullanılması gecikmeyi azaltır.
  • Ağ gecikmesi: Uygulama sunucusu ile RabbitMQ aynı veri merkezinde veya düşük gecikmeli ağda çalışmalıdır.
  • Yedeklilik: Kritik sistemlerde tek RabbitMQ sunucusu yerine cluster ve düzenli yedekleme planı değerlendirilmelidir.

Türkiye lokasyonlu projelerde düşük gecikme için Türkiye VDS Sunucu, Avrupa hedefli uygulamalarda ise Almanya VDS Sunucu seçenekleri değerlendirilebilir.

Ubuntu Üzerinde RabbitMQ Kurulumu

Bu bölümde Ubuntu tabanlı bir Linux sunucuda RabbitMQ kurulumu için temel adımları inceleyeceğiz. Komutları uygulamadan önce sunucunuzda root veya sudo yetkili bir kullanıcıyla oturum açmanız gerekir.

Sistemi Güncelleyin

Kuruluma başlamadan önce paket listesini güncelleyin ve mevcut paketleri yükseltin:

sudo apt update
sudo apt upgrade -y

RabbitMQ Paketini Kurun

Ubuntu depolarında RabbitMQ paketi bulunur. Temel kurulum için aşağıdaki komut yeterlidir:

sudo apt install rabbitmq-server -y

Kurulum tamamlandıktan sonra servis durumunu kontrol edin:

sudo systemctl status rabbitmq-server

Servis aktif değilse başlatabilir ve sistem açılışında otomatik başlamasını sağlayabilirsiniz:

sudo systemctl enable rabbitmq-server
sudo systemctl start rabbitmq-server

Yönetim Panelini Etkinleştirin

RabbitMQ, web tabanlı bir yönetim arayüzü sunar. Bu arayüz kuyrukları, exchange yapılarını, bağlantıları ve kullanıcıları izlemek için oldukça kullanışlıdır.

sudo rabbitmq-plugins enable rabbitmq_management

Yönetim paneli varsayılan olarak 15672 portunda çalışır. Ancak güvenlik nedeniyle bu portu doğrudan herkese açmak yerine VPN, güvenlik duvarı veya ters proxy üzerinden sınırlandırmanız önerilir.

Temel RabbitMQ Yapılandırması

Kurulumdan sonra ilk yapılması gereken işlem, varsayılan kullanıcı davranışını değiştirmek ve uygulamalar için ayrı kullanıcılar oluşturmaktır. RabbitMQ’da erişim yönetimi kullanıcı, sanal host ve izinler üzerinden yapılır.

Yeni Yönetici Kullanıcı Oluşturma

Örnek olarak adminuser adında yönetici yetkili bir kullanıcı oluşturalım:

sudo rabbitmqctl add_user adminuser 'GucluBirParola!2026'
sudo rabbitmqctl set_user_tags adminuser administrator

Uygulama İçin Virtual Host Oluşturma

Virtual host, RabbitMQ içerisinde mantıksal izolasyon sağlayan bir çalışma alanıdır. Farklı projeler için ayrı virtual host kullanmak güvenlik ve yönetim açısından daha doğrudur.

sudo rabbitmqctl add_vhost production_app

Uygulama Kullanıcısı ve Yetkilendirme

Uygulama servisinin yönetici hesabı kullanması yerine sadece ihtiyaç duyduğu yetkilere sahip özel bir kullanıcı oluşturulmalıdır:

sudo rabbitmqctl add_user appuser 'UygulamaParolasi!2026'
sudo rabbitmqctl set_permissions -p production_app appuser ".*" ".*" ".*"

Bu örnekte kullanıcıya ilgili virtual host üzerinde yapılandırma, yazma ve okuma yetkileri verilmiştir. Daha hassas ortamlarda izin desenleri daraltılarak yalnızca belirli kuyruklara erişim sağlanabilir.

Bağlantı Bilgisi Örneği

Uygulama tarafında kullanılacak bağlantı adresi genel olarak şu formata sahiptir:

amqp://appuser:UygulamaParolasi!2026@sunucu-ip-adresi:5672/production_app

Parola ve bağlantı adreslerinin kaynak kod içine düz metin olarak yazılmaması gerekir. Bunun yerine ortam değişkenleri, gizli bilgi yönetimi veya güvenli yapılandırma dosyaları tercih edilmelidir.

RabbitMQ Güvenlik Ayarları

RabbitMQ internete açık bırakıldığında yetkisiz erişim, kimlik bilgisi denemeleri ve servis dışı bırakma saldırıları için hedef haline gelebilir. Bu nedenle güvenlik yapılandırması kurulumun ayrılmaz bir parçası olmalıdır.

Güvenlik Duvarı ile Port Kısıtlama

RabbitMQ’nun temel portları genellikle 5672 ve yönetim paneli için 15672 şeklindedir. Bu portlar yalnızca uygulama sunucularından ve yönetim IP adreslerinden erişilebilir olmalıdır.

sudo ufw allow from 10.0.0.10 to any port 5672 proto tcp
sudo ufw allow from 203.0.113.25 to any port 15672 proto tcp
sudo ufw enable
sudo ufw status

Burada 10.0.0.10 uygulama sunucusunu, 203.0.113.25 ise yönetici IP adresini temsil eder. Kendi altyapınıza göre bu adresleri değiştirmeniz gerekir.

Varsayılan Guest Kullanıcısı

RabbitMQ’da varsayılan guest kullanıcısı yerel erişim dışında kullanılmamalıdır. Üretim ortamlarında bu kullanıcının kaldırılması veya devre dışı bırakılması önerilir.

sudo rabbitmqctl delete_user guest

TLS ile Şifreli Bağlantı

Uygulama sunucusu ile RabbitMQ farklı ağlar üzerinden haberleşiyorsa TLS yani Transport Layer Security ile bağlantının şifrelenmesi önemlidir. Sertifika yönetimi için güvenilir bir yapı kullanılmalı, sertifika dosyalarının izinleri sınırlandırılmalıdır. Web uygulamalarınız ve yönetim panelleriniz için ayrıca SSL Sertifikası kullanarak uçtan uca güvenli iletişim sağlayabilirsiniz.

Yönetim Panelini Sınırlandırma

Yönetim paneli kolaylık sağlasa da üretim ortamında herkese açık olmamalıdır. En iyi yaklaşım, paneli yalnızca VPN, bastion sunucu veya belirli IP adresleri üzerinden erişilebilir hale getirmektir. Ayrıca güçlü parola politikası ve ayrı yönetici hesapları kullanılmalıdır.

Performans Optimizasyonu ve Limitler

RabbitMQ performansı yalnızca CPU ve RAM miktarına bağlı değildir. Kuyruk tasarımı, mesaj kalıcılığı, tüketici sayısı, disk hızı ve bağlantı yönetimi de performansı doğrudan etkiler.

Mesaj Kalıcılığı ve Disk Kullanımı

Kalıcı mesajlar, servis yeniden başlatıldığında veri kaybını azaltır; ancak disk yazma maliyetini artırır. Kritik olmayan anlık bildirimler için kalıcı olmayan mesajlar tercih edilebilirken, ödeme veya sipariş gibi önemli işlemlerde kalıcı kuyruk ve kalıcı mesaj kullanmak daha güvenlidir.

Prefetch Değeri

Prefetch, bir tüketicinin aynı anda kaç mesaj alabileceğini belirler. Çok yüksek prefetch değeri, bazı tüketicilerin gereğinden fazla mesajı üzerine almasına ve iş yükünün dengesiz dağılmasına neden olabilir. Çok düşük değer ise tüketim hızını sınırlandırabilir. Başlangıç için her worker başına 10-50 arası değerler test edilebilir.

Connection ve Channel Yönetimi

Her işlem için yeni bağlantı açmak maliyetlidir. Uygulamalar mümkün olduğunca bağlantı havuzu kullanmalı ve aynı bağlantı üzerinde channel yönetimini doğru yapmalıdır. Kısa ömürlü binlerce bağlantı, RabbitMQ üzerinde gereksiz yük oluşturur.

Sistem Limitlerini Düzenleme

Yüksek bağlantı sayısı beklenen sistemlerde dosya tanıtıcı limitleri artırılmalıdır. Systemd servis override dosyası ile limitler düzenlenebilir:

sudo systemctl edit rabbitmq-server

Açılan dosyaya aşağıdaki örnek değer eklenebilir:

[Service]
LimitNOFILE=65536

Ardından servis yeniden yüklenir ve RabbitMQ yeniden başlatılır:

sudo systemctl daemon-reload
sudo systemctl restart rabbitmq-server

Kuyruk Tasarımı

  • Tek dev kuyruktan kaçının: Tüm işleri tek kuyruğa toplamak yerine iş tipine göre kuyrukları ayırın.
  • Dead letter queue kullanın: Başarısız mesajları ayrı bir kuyruğa alarak analiz ve yeniden işleme imkanı sağlayın.
  • TTL belirleyin: Süresi geçen mesajların kuyrukta gereksiz yer kaplamasını önleyin.
  • Worker ölçeklendirin: Tüketici sayısını mesaj yoğunluğuna göre artırıp azaltın.

Yedekleme, İzleme ve Bakım

RabbitMQ üretim ortamında çalışıyorsa yalnızca kurulum yapmak yeterli değildir. Kuyruk uzunlukları, bellek kullanımı, disk alarmı, bağlantı sayısı ve tüketici durumları düzenli izlenmelidir.

Tanım Yedekleri Alma

RabbitMQ kullanıcı, vhost, exchange, queue ve permission tanımlarını dışa aktarabilir. Bu işlem, yeni sunucuya geçiş veya felaket kurtarma senaryolarında yararlıdır.

sudo rabbitmqctl export_definitions /tmp/rabbitmq-definitions.json

Geri yükleme için yönetim arayüzü veya uygun komutlar kullanılabilir. Ancak mesaj içeriği ile yapılandırma tanımlarının aynı şey olmadığı unutulmamalıdır.

Mesaj Verisinin Korunması

Kalıcı mesajlar disk üzerinde tutulur; ancak bu durum tek başına yedekleme anlamına gelmez. Sunucu arızası, disk bozulması veya yanlış işlem risklerine karşı düzenli yedekleme planı oluşturulmalıdır. Kritik RabbitMQ altyapılarında Yedekleme Hizmeti ile ek koruma katmanı sağlanabilir.

İzlenecek Metrikler

  • Queue length: Kuyrukta bekleyen mesaj sayısı sürekli artıyorsa tüketiciler yetersiz olabilir.
  • Consumer count: Tüketici sayısının beklenen seviyede olup olmadığı kontrol edilmelidir.
  • Memory alarm: Bellek sınırına yaklaşıldığında RabbitMQ yayıncıları yavaşlatabilir.
  • Disk free alarm: Disk boş alanı kritik seviyeye düşerse mesaj kabulü durabilir.
  • Publish ve deliver rate: Mesaj üretim ve tüketim hızları kapasite planlaması için takip edilmelidir.

Pratik Kullanım Senaryoları

RabbitMQ’nun en büyük avantajı farklı sektörlerde benzer problemleri çözebilmesidir. Aşağıdaki senaryolar, gerçek projelerde sık karşılaşılan kullanım şekillerini özetler.

E-Ticaret Sipariş İşleme

Sipariş oluşturulduğunda uygulama, ödeme doğrulama, fatura hazırlama, stok düşme ve e-posta gönderme işlemlerini ayrı mesajlar halinde kuyruğa ekleyebilir. Böylece kullanıcı sipariş onay ekranını hızlı görürken arka plandaki süreçler kontrollü şekilde tamamlanır.

Toplu E-posta ve Bildirim Gönderimi

Kampanya dönemlerinde binlerce kullanıcıya e-posta veya mobil bildirim gönderilmesi gerekebilir. RabbitMQ ile gönderimler parçalara ayrılır, hata alan mesajlar tekrar denenir ve e-posta servis sağlayıcısının hız limitlerine uyum sağlanır.

Görsel ve Video İşleme

Kullanıcının yüklediği görsellerin yeniden boyutlandırılması, sıkıştırılması veya farklı formatlara dönüştürülmesi zaman alabilir. Bu işlemler kuyruğa eklenerek worker sunucularında arka planda çalıştırılabilir.

Raporlama ve Veri Aktarımı

Büyük raporların anlık istek sırasında oluşturulması uygulamayı yavaşlatabilir. RabbitMQ ile rapor isteği kuyruğa eklenir, işlem tamamlandığında kullanıcıya indirme bağlantısı veya bildirim gönderilir.

Mikroservis Olay Yönetimi

Bir serviste gerçekleşen olayın diğer servisleri tetiklemesi gerekiyorsa RabbitMQ publish-subscribe modeliyle kullanılabilir. Örneğin kullanıcı kayıt olduğunda profil servisi, e-posta servisi ve analiz servisi aynı olayı kendi ihtiyaçlarına göre işleyebilir.

Sıkça Sorulan Sorular

RabbitMQ ile Redis Queue arasındaki fark nedir?

Redis genellikle hızlı bellek içi veri yapıları ve basit kuyruk senaryoları için tercih edilirken, RabbitMQ gelişmiş yönlendirme, exchange yapıları, onay mekanizmaları ve protokol desteğiyle daha kapsamlı mesajlaşma ihtiyaçlarına cevap verir. Basit işler için Redis yeterli olabilir; karmaşık servis iletişiminde RabbitMQ daha uygun olabilir.

RabbitMQ tek sunucuda çalıştırılabilir mi?

Evet, küçük ve orta ölçekli projelerde RabbitMQ tek sunucuda çalıştırılabilir. Ancak kritik üretim sistemlerinde yedeklilik, düzenli yedekleme ve mümkünse cluster mimarisi değerlendirilmelidir.

RabbitMQ yönetim panelini internete açmak güvenli midir?

Yönetim panelini doğrudan internete açmak önerilmez. Panel erişimi güvenlik duvarı, VPN, bastion sunucu veya belirli IP kısıtlamaları ile sınırlandırılmalıdır. Ayrıca güçlü parolalar ve ayrı kullanıcı yetkileri kullanılmalıdır.

RabbitMQ mesajları kaybolur mu?

Yanlış yapılandırmada mesaj kaybı yaşanabilir. Kalıcı kuyruk, kalıcı mesaj, publisher confirm ve consumer acknowledgement gibi mekanizmalar doğru kullanıldığında mesaj güvenilirliği önemli ölçüde artırılır.

RabbitMQ için ne kadar RAM gerekir?

Geliştirme ortamında 1-2 GB RAM yeterli olabilir. Üretim ortamında mesaj hacmi, kuyruk sayısı, bağlantı sayısı ve tüketici yoğunluğuna göre en az 4 GB RAM ile başlamak daha sağlıklı olur. Yoğun sistemlerde 8 GB ve üzeri bellek planlanmalıdır.

RabbitMQ hangi portları kullanır?

AMQP bağlantıları için genellikle 5672, TLS destekli AMQP için 5671, yönetim paneli için 15672 portu kullanılır. Cluster ve ek protokoller için farklı portlar da gerekebilir.

RabbitMQ uygulama sunucusuyla aynı makinede mi çalışmalı?

Küçük projelerde aynı sunucuda çalışabilir; ancak üretim ortamında kaynak izolasyonu, güvenlik ve ölçeklenebilirlik için RabbitMQ’nun ayrı bir sunucuda çalışması daha doğru bir yaklaşımdır.

Sonuç

RabbitMQ, modern web uygulamalarında arka plan görevlerini yönetmek, mikroservisler arasında güvenilir iletişim kurmak ve yoğun işlem yükünü kontrollü şekilde dağıtmak için güçlü bir çözümdür. Doğru kurulum, güvenlik duvarı kısıtlamaları, kullanıcı yetkilendirme, TLS kullanımı, performans limitleri ve düzenli izleme ile RabbitMQ üretim ortamında uzun süre kararlı çalışabilir.

Küçük projelerde tek bir Türkiye VPS Sunucu üzerinde başlanabilir; büyüyen iş yüklerinde ise Bulut Sunucu veya yüksek kaynak ihtiyacı için Kiralık Sunucu tercih edilebilir. Corelux altyapısı ile RabbitMQ, web uygulamaları, bildirim servisleri, e-ticaret sistemleri ve mikroservis mimarileri için güvenilir bir mesajlaşma katmanı olarak konumlandırılabilir.

Yazar

Boran BAR

Chat on WhatsApp