RabbitMQ
Genel Bakış
Amacı Nedir?
Apinizer içindeki Integration Flow adımlarının AMQP üzerinden güvenilir biçimde mesaj yayınlamasını sağlar
Birden fazla host/port tanımlayarak cluster içindeki brokerlar arasında yüksek erişilebilirlik sağlar
Sanal host ve basic properties alanlarıyla log mesajlarını, telemetriyi veya iş verilerini hedef kuyruğa uygun formatta iletir
İsteğe bağlı Authentication ve SSL/TLS desteğiyle güvenli mesajlaşmayı garanti eder
Çalışma Prensibi
Integration Flow veya Connector içerisinden RabbitMQ Connection bağlantısı talep edildiğinde, sistem yapılandırılmış connection parametrelerini okur
Tanımlı hostPortList'e göre round-robin stratejisiyle broker seçilir, mevcut açık bağlantı yoksa pool'da yeni AMQP bağlantısı oluşturulur
Authentication toggle'ı aktifleştirildiyse kullanıcı adı/şifre ile, SSL/TLS etkinse sertifika zinciri doğrulanarak hedef sisteme kimlik doğrulaması yapılır
AMQP protokolü üzerinden channel açıl ır, channelExchange ve channelRoutingKey parametreleriyle mesaj yayınlanır; basic properties alanları mesaj meta verisini taşır
İşlem tamamlandıktan sonra bağlantı pool'a geri döner; idle süre aşıldığında otomatik olarak kapatılır
Bağlantı hatası, timeout veya authentication hatası durumunda retry ve fallback host denemesi, uyarı logları ve kullanıcıya detaylı hata mesajı iletilir
Kullanım Alanları
Log, audit ve izleme olaylarının RabbitMQ bazlı merkezi kuyruğa gönderilmesi
Dış sistemlere komut veya event tetiklemek için AMQP topic/queue entegrasyonları
Yüksek hacimli veri işleme pipeline'larında dağıtık mikroservisler arasında mesajlaşma
Üçüncü taraf Message Queue altyapılarına (ör. yönetilen RabbitMQ) güvenli bağlantı
Teknik Özellikler ve Yetenekler
Temel Özellikler
Birden fazla broker adresi eklenerek otomatik failover sağlanır.
connectionFactoryVirtualHost alanı ile tenant bazlı izolasyon desteklenir.
AppId, ContentType, Priority gibi alanlar önceden tanımlanarak mesaj formatı standardize edilir.
Her ortam (Development, Test, Production) için ayrı connection parametreleri tanımlama imkanı.
Connection'ı aktif veya pasif hale getirme (enable/disable toggle). Pasif durumda bağlantı kullanılamaz ancak yapılandırması saklanır.
İleri Düzey Özellikler
Kimlik doğrulama gerekmeyen brokerlarda devre dışı bırakılabilir, gerektiğinde kullanıcı adı/şifre zorunlu olur.
TLS sürümü serbestçe yazılabilir, self-signed sertifikalar development ortamında test edilebilir.
RequestedChannelMax, RequestedFrameMax ve RequestedHeartbeat değerleri ile broker kapasitesine uyum sağlanır.
"Test Connection" butonu ile bağlantı parametrelerini kaydetmeden önce doğrulama imkanı.
Connection yapılandırmasını ZIP dosyası olarak export etme. Farklı ortamlara (Development, Test, Production) import etme. Versiyon kontrolü ve yedekleme imkanı.
Bağlantı sağlığı, pool durumu ve performans metriklerini izleme.
Connection Parametreleri
Zorunlu Parametreler
Açıklama: Connection adı (benzersiz olmalı)
Örnek Değer: Production_RabbitMQ
Notlar: Boşlukla başlamaz, özel karakterler kullanılmamalı
Açıklama: Her broker için host ve port çifti
Örnek Değer: mq1.internal.local:5672
Notlar: En az bir satır zorunlu; tüm satırlarda host ve port doldurulmalı
Açıklama: AMQP sanal host adı
Örnek Değer: /apinizer
Notlar: RabbitMQ yönetim konsolundaki vhost adıyla eşleşmeli
Açıklama: AMQP bağlantısı kurulana kadar beklenecek süre
Örnek Değer: 60000
Notlar: ms cinsinden; 0 değeri sınırsız bekleme anlamına gelir
Açıklama: Her bağlantı için maksimum channel sayısı
Örnek Değer: 2047
Notlar: Broker limitini aşmamalı
Açıklama: AMQP frame boyutu limiti
Örnek Değer: 0
Notlar: 0 değeri broker varsayılanını kullanır
Açıklama: Broker ile heartbeat aralığı
Örnek Değer: 60
Notlar: Saniye cinsinden; 0 -> heartbeat devre dışı
Açıklama: Mesajın yönlendirileceği queue veya topic anahtarı
Örnek Değer: apinizer.audit.queue
Notlar: Queue adıyla aynı tutulması önerilir
Açıklama: Mesajı oluşturan uygulama kimliği
Örnek Değer: apinizer
Notlar: API loglarında izlenebilir
Açıklama: Mesaj gövde formatı
Örnek Değer: application/json
Notlar: application/xml vb. değerler desteklenir
Açıklama: İçerik karakter seti
Örnek Değer: UTF-8
Notlar: Broker ve tüketici aynı encoding'i kullanmalı
Açıklama: 1 (geçici) veya 2 (kalıcı) teslim modu
Örnek Değer: 2
Notlar: Kalıcılık için 2 seçilmelidir
Açıklama: Mesaj önceliği (0-9)
Örnek Değer: 5
Notlar: Kuyruk önceliği etkin olmalıdır
Açıklama: Yanıtın döneceği queue
Örnek Değer: apinizer.reply
Notlar: Request/Reply desenlerinde zorunlu
Açıklama: Mesajın TTL değeri (ms)
Örnek Değer: 60000
Notlar: Kuyruk politikasını aşmamalı
Açıklama: Mesaj tipini tanımlar
Örnek Değer: apinizer-log-type
Notlar: Tüketicide filtreleme için kullanılır
Açıklama: RabbitMQ kullanıcı kimliği
Örnek Değer: guest
Notlar: Authentication etkinse broker doğrular
Açıklama: Broker cluster kimliği
Örnek Değer: cluster-eu-central
Notlar: Cluster izlenebilirlik raporlarında kullanılır
İsteğe Bağlı Parametreler
Açıklama: Connection amacı hakkında açıklama
Varsayılan Değer: -
Önerilen Değer: Süreç veya proje adını belirtin
Açıklama: Mesajın yayınlanacağı exchange adı
Varsayılan Değer: ""
Önerilen Değer: apinizer.audit.exchange
Açıklama: Kimlik doğrulama gerekliliği toggle'ı
Varsayılan Değer: false
Önerilen Değer: Production ortamında true
Açıklama: Authentication etkinse kullanıcı adı
Varsayılan Değer: guest
Önerilen Değer: Ayrı bir servis hesabı kullanın
Açıklama: Kullanıcı için şifre
Varsayılan Değer: guest
Önerilen Değer: Secret Manager üzerinden yönetilen güçlü parola
Açıklama: SSL/TLS kullanım durumu
Varsayılan Değer: false
Önerilen Değer: Production'da true
Açıklama: Kullanılacak TLS sürümü
Varsayılan Değer: TLSv1.2
Önerilen Değer: Broker desteğine göre TLSv1.3
Açıklama: Exchange ile routing key ilişkisi notu
Varsayılan Değer: -
Önerilen Değer: Ortam bazlı tablo tutun
Timeout ve Connection Pool Parametreleri
Açıklama: Bağlantı kurulması için maksimum bekleme süresi
Varsayılan: 60000 ms
Min: 1000 ms | Max: 300000 ms
Açıklama: Mesaj gönderiminin yanıt bekleme süresi
Varsayılan: 30000 ms
Min: 5000 ms | Max: 120000 ms
Açıklama: Connection pool'daki maksimum bağlantı sayısı
Varsayılan: 10
Min: 1 | Max: 100
Açıklama: Broker ile heartbeat süresi
Varsayılan: 60 saniye
Min: 0 | Max: 300 saniye
Kullanım Senaryoları
Durum: Gateway loglarını merkezi kuyruğa aktarma
Çözüm: channelRoutingKey=apinizer.logs, deliveryMode=2
Beklenen Sonuç: Tüm log mesajları kalıcı kuyrukta toplanır
Durum: Yetkili işlemleri izleme
Çözüm: basicPropertiesType=audit, SSL aktif
Beklenen Sonuç: Güvenli audit mesajları tüketici servise ulaşır
Durum: Birden fazla tüketiciye yayımlama
Çözüm: channelExchange=apinizer.events, topic exchange
Beklenen Sonuç: Tüm aboneler routing key desenine göre mesaj alır
Durum: Bir broker düştüğünde süreklilik
Çözüm: hostPortList'e en az 3 node ekleme
Beklenen Sonuç: Bağlantı otomatik olarak diğer node'a geçer
Durum: Zamana duyarlı görevler
Çözüm: basicPropertiesExpiration=120000, priority düşürme
Beklenen Sonuç: Mesajlar 2 dakika sonra otomatik silinir
Durum: Hızlı komut iletimi
Çözüm: connectionFactoryRequestedHeartbeat=30, pool size=20
Beklenen Sonuç: Gecikme azalır, throughput artar
Connection Yapılandırma
Yeni RabbitMQ Bağlantısı Oluşturma
Sol menüden Connection → RabbitMQ Bağlantısı bölümüne gidin.
Sağ üstteki [+ Create] butonuna tıklayın.
Enable Status (Aktif Durumu): Toggle ile aktif/pasif durumu ayarlayın. Yeni connection'lar varsayılan olarak aktiftir.
Name (İsim) Zorunlu:
Örnek: Production_RabbitMQ
- Benzersiz isim girin, boşlukla başlamaz.
- Sistem otomatik kontrol eder. Yeşil tik: kullanılabilir. Kırmızı çarpı: mevcut isim.
Description (Açıklama):
Örnek: "RabbitMQ log publishing connection"
- Maks. 1000 karakter.
- Connection'ın amacını açıklayın.
Sayfanın üst kısmındaki işlem butonları alanında, [<> Variable] butonunu kullanarak dinamik değer seçebilir, Global variable ifadeleri sayesinde connection parametrelerini sabit değer yerine değişken tabanlı yönetebilirsiniz. Detaylı bilgi için Dinamik Değişkenler sayfasını inceleyebilirsiniz.
Dropdown menüden ortam seçin: Development, Test, veya Production.
Her ortam için farklı connection parametreleri tanımlanabilir.
Add Host butonuyla broker adresleri ekleyin.
Her satırda host ve port alanları dolu olmalıdır.
Connection Factory Virtual Host alanına broker'daki vhost değerini yazın.
Channel Exchange değerini (varsa) girin.
Channel Routing Key, Basic Properties alanlarını RabbitMQ tüketici gereksinimlerine göre doldurun.
Teslim modunu (1/2) ve önceliği belirleyin.
Connection Timeout, Requested Frame/Channel Max, Requested Heartbeat alanlarını trafik hacmine göre ayarlayın.
Kurumsal standartlara göre Pool Size yönetim ekranından güncellenir.
Authentication Enabled toggle'ını aktif edin.
Username/Password alanlarını doldurun.
SSL gerekiyorsa Use SSL Protocol toggle'ını açın ve TLS sürümünü belirtin.
[Test Connection] butonuna tıklayın.
Bağlantı parametrelerinin doğru olup olmadığını test edin.
Başarılı: Yeşil onay mesajı, Başarısız: Hata detayları gösterilir.
Sağ üstteki [Save and Deploy] butonuna tıklayın.
Kontrol Listesi: Benzersiz isim. Zorunlu alanlar dolu. Test connection başarılı (önerilir)
Sonuç:
-
Connection listeye eklenir.
-
Integration Flow ve Connector adımlarında kullanılabilir hale gelir.
-
Ortama göre aktif olur.
ipucu
Connection başarıyla oluşturuldu! Artık Integration Flow ve Connector adımlarında kullanabilirsiniz.
:::
Connection'ı Silme
Connection'ı silmek için:
- Connection listesinde satır sonundaki ⋮ menüsünden Delete seçeneğini tıklayın.
- Onay dialogunda silme işlemini onaylayın.
Silmeden Önce Kontrol Edin:
- Integration Flow veya Connector adımlarında kullanılıyor olabilir.
- Gerekirse alternatif bir connection atayın.
- Silmeden önce Export ile yedek alın.
- Silmek yerine connection'ın aktif durumunu pasif hale getirin.
- Connection pasif olur ancak silinmez.
- Gerektiğinde aktif hale getirerek yeniden kullanabilirsiniz.
Connection'ı Dışa/İçe Aktarma
Bu adımda kullanıcı, mevcut connection'ları yedekleme, farklı ortamlara taşıma veya paylaşma amacıyla dışa aktarabilir (export) ya da daha önce dışa aktarılmış bir connection'ı tekrar içe aktarabilir (import). Bu işlem, sürüm yönetimi, test ve üretim ortamları arasında geçiş veya ekipler arası paylaşım süreçlerinde veri bütünlüğünü korumak için kullanılır.
Dışa Aktarma (Export)
- Connection listesinde satır sonundaki ⋮ menüsünden Export seçeneğini tıklayın.
- ZIP dosyası otomatik olarak indirilir.
Format: {Date}-rabbitMq-integration-{ConnectionName}-export.zip
Örnek: 13 Nov 2025-rabbitMq-integration-Production_RabbitMQ-export.zip
- Connection JSON dosyası
- Metadata bilgileri
- Bağımlılık bilgileri (örneğin sertifikalar, key store)
- Yedekleme
- Ortamlar arası taşıma (Test → Prod)
- Versiyonlama
- Ekip veya proje bazlı paylaşım
İçe Aktarma (Import)
- Ana listede [Import RabbitMQ Bağlantısı] butonuna tıklayın.
- İndirilen ZIP dosyasını seçin.
- Sistem kontrolleri: Format geçerli mi? İsim çakışması var mı? Bağımlılıklar mevcut mu?
- Ardından [Import] butonuna tıklayın.
Senaryo 1: İsim Çakışması → Eski connection'ın üzerine yazın veya yeni bir isimle oluşturun.
Senaryo 2: Eksik Bağımlılıklar → Eksik sertifikaları veya key store'ları önce oluşturun veya import sırasında çıkarın.
Connection'ın Kullanım Alanları
Adımlar:
- Connection'ı oluşturun
- Test Connection ile bağlantıyı doğrulayın
- Save and Deploy ile kaydedin ve etkinleştirin
- Connection'ın Enabled durumda olduğundan emin olun.
RabbitMQ AMQP protokolü ile mesaj gönderme gerektiren adımlarda connection seçilir. Örnek: "Send Message", "RabbitMQ Publish", "AMQP Message" gibi adımlar. Bağlantı seçimi bu adımların yapılandırmasında yer alan Connection alanından yapılır.
Zamanlanmış görevlerde (ör. belirli aralıklarla RabbitMQ'ya mesaj gönderme, log streaming vb.) bağlantı seçilerek RabbitMQ broker'larına erişim sağlanır. Connection değiştiğinde, job çalışma davranışı da buna göre güncellenir.
Connection Test özelliği ile bağlantının doğruluğu Integration Flow'dan bağımsız olarak kontrol edilebilir. Bu test hata ayıklama sürecinde kritik önem taşır.
Best Practices
Yapılması Gerekenler ve En İyi Uygulamalar
Kötü: Tek host tanımlamak
İyi: İki host eklemek
En İyi: Tüm broker nodelarını hostPortList'e ekleyip health check sonuçlarına göre sıralamak
Kötü: Rastgele routing key kullanmak
İyi: Queue adını routing key olarak kullanmak
En İyi: domain.context.event formatında isimlendirme yaparak bakım kolaylığı sağlamak
Kötü: Expiration alanını boş bırakmak
İyi: Varsayılan 60 saniye tanımlamak
En İyi: İş gereksinimine göre ortam bazlı TTL setleri oluşturmak
Kötü: guest/guest kimlik bilgilerini tüm ortamlarda kullanmak
İyi: Production için farklı kullanıcı oluşturmak
En İyi: Sadece gerekli izinlere sahip servis hesapları ve secret rotation politikası uygulamak
Kötü: Tüm ortamlarda aynı connection parametrelerini kullanmak
İyi: Her ortam için ayrı connection oluşturmak
En İyi: Environment seçeneğini kullanarak tek connection'da tüm ortamları yönetmek, ortamlar arası geçişte sadece environment değiştirmek
Kötü: Connection'ı test etmeden kaydetmek ve deploy etmek
İyi: Kaydetmeden önce Test Connection ile doğrulamak
En İyi: Her parametre değişikliğinden sonra test etmek, production'a geçmeden önce test ortamında tam entegrasyon testi yapmak
Güvenlik En İyi Uygulamaları
Kullanıcıya yalnızca gerekli vhost ve queue izinlerini verin; configure/write/read izinlerini ayrı ayrı yönetin
SSL/TLS etkinse broker sertifikalarını keystore'a ekleyin, expiration tarihlerini izleyin, yenilemeyi önceden planlayın
Authentication hatalarını ve SSL negotiation loglarını merkezi log havuzuna gönderin, SIEM üzerinden alarm üretin
Kullanıcı adı ve şifre gibi hassas bilgileri environment variable veya secret manager kullanarak saklayın. Kimlik bilgilerini kod veya konfigürasyon dosyalarına hardcode etmeyin. Periyodik olarak şifreleri güncelleyin
Production ortamında mutlaka SSL/TLS aktif edin. Self-signed sertifikalar sadece development ortamında kullanın. Sertifika expiration tarihlerini takip edin ve zamanında yenileyin
Connection yapılandırmasını sadece yetkili kullanıcıların değiştirmesine izin verin. Connection değişiklik loglarını saklayın. Kritik connection'lar için değişiklik approval süreci uygulayın
Kaçınılması Gerekenler
Neden kaçınılmalı: Tek routing key tüm mesajları aynı kuyruğa yönlendirir, darboğaz oluşur
Alternatif: Mesaj tipine göre farklı routing key tanımlayın
Neden kaçınılmalı: Broker bağlantı kopmalarını tespit edemez
Alternatif: En az 30 saniyelik heartbeat kullanın
Neden kaçınılmalı: Sertifikanın kopyalanması güvenlik açığı yaratır
Alternatif: Her ortam için ayrı sertifika/credential kullanın
Neden kaçınılmalı: Test verileri production sistemine yazılabilir, gerçek kullanıcılar etkilenebilir, güvenlik riski oluşur
Alternatif: Her ortam için ayrı connection oluşturun, environment parametresini kullanın, connection isimlerini ortama göre prefix ekleyerek ayırın (Test_, Prod_)
Neden kaçınılmalı: Ağ gecikmelerinde connection sürekli timeout olur, Entegrasyon adımları başarısız olur
Alternatif: Gerçek kullanım senaryolarına göre timeout değerlerini ayarlayın, network latency'yi ölçün ve timeout'ları buna göre belirleyin
Neden kaçınılmalı: Her istekte yeni bağlantı açılır, performans düşer, kaynak tüketimi artar, hedef sistem yükü artar
Alternatif: Connection pool aktif edin, pool size'ı trafik hacmine göre ayarlayın, pool monitoring kurun
Performans İpuçları
Öneri: 128 KB üzeri mesajları parçalayın veya gzip kullanın
Etki: FrameMax sınırına takılma riski azalır, throughput artar
Öneri: service.region.event kalıbı kullanın
Etki: Tüketiciler pattern ile kolay filtreleme yapar, subscription sayısı düşer
Öneri: WAN bağlantılarında 60 sn, LAN'de 30 sn heartbeat kullanın
Etki: Kopmalar hızlı tespit edilir, gereksiz reconnect önlenir
Öneri: Pool size'ı peak trafiğe göre ayarlayın (önerilen: eşzamanlı istek sayısı × 1.5), idle connection timeout'ları belirleyin, pool health check yapın
Etki: Bağlantı açma maliyeti %80 azalır, yanıt süreleri düşer, kaynak kullanımı optimize edilir
Öneri: Gerçek network latency'yi ölçün, timeout değerlerini buna göre ayarlayın, çok düşük veya çok yüksek timeout'lardan kaç ının
Etki: Gereksiz beklemeler önlenir, hızlı fail-over sağlanır, kullanıcı deneyimi iyileşir
Öneri: Connection pool kullanımını izleyin, timeout oranlarını takip edin, connection health check yapın, alerting kurun
Etki: Sorunlar proaktif tespit edilir, performans darboğazları erken belirlenir, kesinti süresi azalır
Sorun Giderme (Troubleshooting)
Message Rejected by Broker
Yanlış routing key, exchange binding yok veya kullanıcının write izni yok olabilir.
Exchange/queue binding'lerini kontrol edin.
Routing key'i broker üzerinden test edin.
Kullanıcı izinlerini güncelleyin.
SSL Handshake Failure
Yanlış TLS sürümü, sertifika zinciri eksik veya self-signed sertifika Production'da kullanılıyor olabilir.
Broker desteklediği TLS sürümünü doğrulayın.
Sertifikayı keystore'a yeniden yükleyin.
Production'da CA imzalı sertifika kullanın.
Connection Timeout
Network gecikmesi, hedef sistem yavaş yanıt veriyor veya timeout değeri çok düşük olabilir.
Network connectivity kontrol edin.
Hedef sistem sağlığını kontrol edin.
Timeout değerlerini artırın.
Connection loglarını inceleyin.
Authentication Failed
Yanlış kullanıcı adı/şifre, expired credentials veya yetki problemi olabilir.
Kimlik bilgilerini doğrulayın.
Hedef sistemde kullanıcının aktif olduğunu kontrol edin.
Gerekli yetkilerin verildiğini kontrol edin.
SSL/TLS sertifikalarını kontrol edin.
Pool Exhausted
Pool size çok düşük, connection leak var veya trafik çok yüksek olabilir.
Pool size'ı artırın.
Connection'ların düzgün kapatıldığını kontrol edin.
Idle connection timeout'ları ayarlayın.
Connection kullanım metriklerini izleyin.
Connection Test Başarılı Ama Entegrasyon Akışı Hata Veriyor
Integration/Connector adımında farklı connection seçili olabilir, adım yanlış yapılandırılmış olabilir veya Flow/Job redeploy edilmemiş olabilir.
Connection'ın enable toggle'ının aktif olduğunu kontrol edin.
Integration Flow'da doğru connection'ın seçildiğini doğrulayın.
Connection'ı tekrar deploy edin.
Integration Flow veya Job'ı redeploy edin.
Gateway loglarını kontrol edin.
Sık Sorulan Sorular (SSS)
Aynı RabbitMQ Bağlantısı ile hem log hem de iş verisi gönderebilir miyim?
Evet, ancak routing key ve basic properties alanlarını farklı Integration Flow adımlarında özelleştirmek gerekir.
Host listesinde IP yerine DNS kullanmak zorunda mıyım?
Hayır, IP de kullanılabilir fakat DNS kullanımı node değişikliklerinde bakım maliyetini düşürür.
Heartbeat değerini nasıl seçmeliyim?
WAN ortamlarında 60 sn, LAN'de 30 sn önerilir; broker ve client aynı değeri kullanmalıdır.
TLSv1.3 destekleniyor mu?
Broker ve JVM sürümünüz destekliyorsa connectionFactorySslProtocol alanına TLSv1.3 yazabilirsiniz.
Mesaj TTL'ini ortam bazlı farklılaştırabilir miyim?
Evet, Environment seçimi sonrası basicPropertiesExpiration değerini ortam için güncelleyebilirsiniz.
Aynı connection'ı birden fazla Integration Flow'da kullanabilir miyim?
Evet, aynı connection birden fazla Integration Flow veya Connector adımında kullanılabilir. Bu merkezi yönetim sağlar ve konfigürasyon tutarlılığını garanti eder. Ancak connection'da yapılan değişiklikler tüm kullanım yerlerini etkileyeceği için dikkatli olunmalıdır.
Connection pool kullanmak zorunlu mudur?
Connection pool kullanımı zorunlu değildir ancak yüksek trafikli sistemlerde şiddetle önerilir. Her istekte yeni bağlantı açmak yerine mevcut bağlantıları yeniden kullanmak performansı önemli ölçüde artırır.
Test ve Production için farklı connection'lar mı oluşturmalıyım?
Evet, her ortam için ayrı connection oluşturmanız önerilir. Alternatif olarak environment parametresini kullanarak tek connection içinde tüm ortamları yönetebilirsiniz. Bu yaklaşım daha kolay yönetim ve daha az hata riski sağlar.
Test Connection başarılı ama Integration Flow'da çalışmıyor, neden?
Birkaç neden olabilir:
- Connection enable toggle'ı pasif olabilir
- Integration adımında farklı bir connection seçili olabilir
- Connection deploy edilmemiş olabilir
- Integration Flow henüz redeploy edilmemiş olabilir