RabbitMQ Sunucu Kurulumu ve Güvenli Mesaj Kuyruğu Yönetimi
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 Ne Zaman Kullanılır?
- Sunucu Gereksinimleri ve Mimari Planlama
- Ubuntu Üzerinde RabbitMQ Kurulumu
- Temel RabbitMQ Yapılandırması
- RabbitMQ Güvenlik Ayarları
- Performans Optimizasyonu ve Limitler
- Yedekleme, İzleme ve Bakım
- Pratik Kullanım Senaryoları
- Sıkça Sorulan Sorular
- Sonuç
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