> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apinizer.com/llms.txt
> Use this file to discover all available pages before exploring further.

# RabbitMQ

> RabbitMQ Queue Connections yapılandırması yapar ve kullanır. AMQP protokolü ile mesaj kuyruğu yönetimi ve cluster desteğiyle güvenli mesajlaşma gerçekleştirebilir

## Genel Bakış

<AccordionGroup>
  <Accordion title="Amacı Nedir?">
    <CardGroup cols={1}>
      <Card title="AMQP Mesaj Yayınlama" icon="send">
        Apinizer içindeki Integration Flow adımlarının AMQP üzerinden güvenilir biçimde mesaj yayınlamasını sağlar
      </Card>

      <Card title="Yüksek Erişilebilirlik" icon="activity">
        Birden fazla host/port tanımlayarak cluster içindeki brokerlar arasında yüksek erişilebilirlik sağlar
      </Card>

      <Card title="Esnek Mesaj Formatı" icon="file-text">
        Sanal host ve basic properties alanlarıyla log mesajlarını, telemetriyi veya iş verilerini hedef kuyruğa uygun formatta iletir
      </Card>

      <Card title="Güvenli Mesajlaşma" icon="shield">
        İsteğe bağlı Authentication ve SSL/TLS desteğiyle güvenli mesajlaşmayı garanti eder
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Çalışma Prensibi">
    <CardGroup cols={2}>
      <Card title="Bağlantı Başlatma" icon="play">
        Integration Flow veya Connector içerisinden RabbitMQ Connection bağlantısı talep edildiğinde, sistem yapılandırılmış connection parametrelerini okur
      </Card>

      <Card title="Connection Pool Yönetimi" icon="database">
        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
      </Card>

      <Card title="Kimlik Doğrulama" icon="lock">
        Authentication toggle'ı aktifleştirildiyse kullanıcı adı/şifre ile, SSL/TLS etkinse sertifika zinciri doğrulanarak hedef sisteme kimlik doğrulaması yapılır
      </Card>

      <Card title="Veri İletişimi" icon="send">
        AMQP protokolü üzerinden channel açılır, channelExchange ve channelRoutingKey parametreleriyle mesaj yayınlanır; basic properties alanları mesaj meta verisini taşır
      </Card>

      <Card title="Bağlantı Yönetimi" icon="settings">
        İşlem tamamlandıktan sonra bağlantı pool'a geri döner; idle süre aşıldığında otomatik olarak kapatılır
      </Card>

      <Card title="Hata Yönetimi" icon="alert-circle">
        Bağlantı hatası, timeout veya authentication hatası durumunda retry ve fallback host denemesi, uyarı logları ve kullanıcıya detaylı hata mesajı iletilir
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Kullanım Alanları">
    <CardGroup cols={2}>
      <Card title="Log ve Audit" icon="file-text">
        Log, audit ve izleme olaylarının RabbitMQ bazlı merkezi kuyruğa gönderilmesi
      </Card>

      <Card title="Event Tetikleme" icon="zap">
        Dış sistemlere komut veya event tetiklemek için AMQP topic/queue entegrasyonları
      </Card>

      <Card title="Mikroservis Mesajlaşma" icon="workflow">
        Yüksek hacimli veri işleme pipeline'larında dağıtık mikroservisler arasında mesajlaşma
      </Card>

      <Card title="Yönetilen RabbitMQ Entegrasyonu" icon="cloud">
        Üçüncü taraf Message Queue altyapılarına (ör. yönetilen RabbitMQ) güvenli bağlantı
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## Teknik Özellikler ve Yetenekler

<AccordionGroup>
  <Accordion title="Temel Özellikler">
    <CardGroup cols={2}>
      <Card title="Çoklu Host/Port Tanımı" icon="network-wired">
        Birden fazla broker adresi eklenerek otomatik failover sağlanır.
      </Card>

      <Card title="Sanal Host Yönetimi" icon="layers">
        connectionFactoryVirtualHost alanı ile tenant bazlı izolasyon desteklenir.
      </Card>

      <Card title="AMQP Basic Properties Şablonu" icon="file-code">
        AppId, ContentType, Priority gibi alanlar önceden tanımlanarak mesaj formatı standardize edilir.
      </Card>

      <Card title="Ortam Bazlı Yapılandırma" icon="code-branch">
        Her ortam (Development, Test, Production) için ayrı connection parametreleri tanımlama imkanı.
      </Card>

      <Card title="Enable/Disable Kontrolü" icon="toggle-on">
        Connection'ı aktif veya pasif hale getirme (enable/disable toggle). Pasif durumda bağlantı kullanılamaz ancak yapılandırması saklanır.
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="İleri Düzey Özellikler">
    <CardGroup cols={2}>
      <Card title="Authentication Toggle" icon="shield">
        Kimlik doğrulama gerekmeyen brokerlarda devre dışı bırakılabilir, gerektiğinde kullanıcı adı/şifre zorunlu olur.
      </Card>

      <Card title="SSL/TLS Protokol Seçimi" icon="shield-check">
        TLS sürümü serbestçe yazılabilir, self-signed sertifikalar development ortamında test edilebilir.
      </Card>

      <Card title="Heartbeat ve Channel Limitleri" icon="heart">
        RequestedChannelMax, RequestedFrameMax ve RequestedHeartbeat değerleri ile broker kapasitesine uyum sağlanır.
      </Card>

      <Card title="Connection Test Özelliği" icon="flask">
        "Test Connection" butonu ile bağlantı parametrelerini kaydetmeden önce doğrulama imkanı.
      </Card>

      <Card title="Export/Import Özelliği" icon="file-export">
        Connection yapılandırmasını ZIP dosyası olarak export etme. Farklı ortamlara (Development, Test, Production) import etme. Versiyon kontrolü ve yedekleme imkanı.
      </Card>

      <Card title="Connection Monitoring" icon="chart-line">
        Bağlantı sağlığı, pool durumu ve performans metriklerini izleme.
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## Connection Parametreleri

<AccordionGroup>
  <Accordion title="Zorunlu Parametreler">
    <CardGroup cols={1}>
      <Card title="Name" icon="tag">
        **Açıklama:** Connection adı (benzersiz olmalı)\
        **Örnek Değer:** `Production_RabbitMQ`\
        **Notlar:** Boşlukla başlamaz, özel karakterler kullanılmamalı
      </Card>

      <Card title="Host/Port Listesi" icon="server">
        **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ı
      </Card>

      <Card title="Connection Factory Virtual Host" icon="layers">
        **Açıklama:** AMQP sanal host adı\
        **Örnek Değer:** `/apinizer`\
        **Notlar:** RabbitMQ yönetim konsolundaki vhost adıyla eşleşmeli
      </Card>

      <Card title="Connection Factory Connection Timeout" icon="clock">
        **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
      </Card>

      <Card title="Requested Channel Max" icon="maximize">
        **Açıklama:** Her bağlantı için maksimum channel sayısı\
        **Örnek Değer:** `2047`\
        **Notlar:** Broker limitini aşmamalı
      </Card>

      <Card title="Requested Frame Max" icon="maximize-2">
        **Açıklama:** AMQP frame boyutu limiti\
        **Örnek Değer:** `0`\
        **Notlar:** 0 değeri broker varsayılanını kullanır
      </Card>

      <Card title="Requested Heartbeat" icon="heart">
        **Açıklama:** Broker ile heartbeat aralığı\
        **Örnek Değer:** `60`\
        **Notlar:** Saniye cinsinden; 0 -> heartbeat devre dışı
      </Card>

      <Card title="Channel Routing Key" icon="key">
        **Açıklama:** Mesajın yönlendirileceği queue veya topic anahtarı\
        **Örnek Değer:** `apinizer.audit.queue`\
        **Notlar:** Queue adıyla aynı tutulması önerilir
      </Card>

      <Card title="Basic Properties AppId" icon="code">
        **Açıklama:** Mesajı oluşturan uygulama kimliği\
        **Örnek Değer:** `apinizer`\
        **Notlar:** API loglarında izlenebilir
      </Card>

      <Card title="Basic Properties ContentType" icon="file-text">
        **Açıklama:** Mesaj gövde formatı\
        **Örnek Değer:** `application/json`\
        **Notlar:** application/xml vb. değerler desteklenir
      </Card>

      <Card title="Basic Properties ContentEncoding" icon="type">
        **Açıklama:** İçerik karakter seti\
        **Örnek Değer:** `UTF-8`\
        **Notlar:** Broker ve tüketici aynı encoding'i kullanmalı
      </Card>

      <Card title="Basic Properties DeliveryMode" icon="send">
        **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
      </Card>

      <Card title="Basic Properties Priority" icon="arrow-up">
        **Açıklama:** Mesaj önceliği (0-9)\
        **Örnek Değer:** `5`\
        **Notlar:** Kuyruk önceliği etkin olmalıdır
      </Card>

      <Card title="Basic Properties ReplyTo" icon="reply">
        **Açıklama:** Yanıtın döneceği queue\
        **Örnek Değer:** `apinizer.reply`\
        **Notlar:** Request/Reply desenlerinde zorunlu
      </Card>

      <Card title="Basic Properties Expiration" icon="clock">
        **Açıklama:** Mesajın TTL değeri (ms)\
        **Örnek Değer:** `60000`\
        **Notlar:** Kuyruk politikasını aşmamalı
      </Card>

      <Card title="Basic Properties Type" icon="tag">
        **Açıklama:** Mesaj tipini tanımlar\
        **Örnek Değer:** `apinizer-log-type`\
        **Notlar:** Tüketicide filtreleme için kullanılır
      </Card>

      <Card title="Basic Properties UserId" icon="user">
        **Açıklama:** RabbitMQ kullanıcı kimliği\
        **Örnek Değer:** `guest`\
        **Notlar:** Authentication etkinse broker doğrular
      </Card>

      <Card title="Basic Properties ClusterId" icon="network">
        **Açıklama:** Broker cluster kimliği\
        **Örnek Değer:** `cluster-eu-central`\
        **Notlar:** Cluster izlenebilirlik raporlarında kullanılır
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="İsteğe Bağlı Parametreler">
    <CardGroup cols={1}>
      <Card title="Description" icon="file-text">
        **Açıklama:** Connection amacı hakkında açıklama\
        **Varsayılan Değer:** -\
        **Önerilen Değer:** Süreç veya proje adını belirtin
      </Card>

      <Card title="Channel Exchange" icon="repeat">
        **Açıklama:** Mesajın yayınlanacağı exchange adı\
        **Varsayılan Değer:** ""\
        **Önerilen Değer:** apinizer.audit.exchange
      </Card>

      <Card title="Authentication Enabled" icon="lock">
        **Açıklama:** Kimlik doğrulama gerekliliği toggle'ı\
        **Varsayılan Değer:** false\
        **Önerilen Değer:** Production ortamında true
      </Card>

      <Card title="Connection Factory Username" icon="user">
        **Açıklama:** Authentication etkinse kullanıcı adı\
        **Varsayılan Değer:** guest\
        **Önerilen Değer:** Ayrı bir servis hesabı kullanın
      </Card>

      <Card title="Connection Factory Password" icon="key">
        **Açıklama:** Kullanıcı için şifre\
        **Varsayılan Değer:** guest\
        **Önerilen Değer:** Secret Manager üzerinden yönetilen güçlü parola
      </Card>

      <Card title="Connection Factory Use SSL Protocol" icon="shield">
        **Açıklama:** SSL/TLS kullanım durumu\
        **Varsayılan Değer:** false\
        **Önerilen Değer:** Production'da true
      </Card>

      <Card title="Connection Factory SSL Protocol" icon="shield-check">
        **Açıklama:** Kullanılacak TLS sürümü\
        **Varsayılan Değer:** TLSv1.2\
        **Önerilen Değer:** Broker desteğine göre TLSv1.3
      </Card>

      <Card title="Channel Exchange Binding" icon="link">
        **Açıklama:** Exchange ile routing key ilişkisi notu\
        **Varsayılan Değer:** -\
        **Önerilen Değer:** Ortam bazlı tablo tutun
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

### Timeout ve Connection Pool Parametreleri

<CardGroup cols={2}>
  <Card title="Connection Timeout" icon="clock">
    **Açıklama:** Bağlantı kurulması için maksimum bekleme süresi\
    **Varsayılan:** 60000 ms\
    **Min:** 1000 ms | **Max:** 300000 ms
  </Card>

  <Card title="Request Timeout" icon="hourglass">
    **Açıklama:** Mesaj gönderiminin yanıt bekleme süresi\
    **Varsayılan:** 30000 ms\
    **Min:** 5000 ms | **Max:** 120000 ms
  </Card>

  <Card title="Pool Size" icon="layer-group">
    **Açıklama:** Connection pool'daki maksimum bağlantı sayısı\
    **Varsayılan:** 10\
    **Min:** 1 | **Max:** 100
  </Card>

  <Card title="Heartbeat Interval" icon="heart">
    **Açıklama:** Broker ile heartbeat süresi\
    **Varsayılan:** 60 saniye\
    **Min:** 0 | **Max:** 300 saniye
  </Card>
</CardGroup>

## Kullanım Senaryoları

<CardGroup cols={2}>
  <Card title="Log Streaming" icon="file-text">
    **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
  </Card>

  <Card title="Audit Trail" icon="shield">
    **Durum:** Yetkili işlemleri izleme\
    **Çözüm:** basicPropertiesType=audit, SSL aktif\
    **Beklenen Sonuç:** Güvenli audit mesajları tüketici servise ulaşır
  </Card>

  <Card title="Event Fan-out" icon="send">
    **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
  </Card>

  <Card title="Failover Cluster" icon="activity">
    **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
  </Card>

  <Card title="Uzun Kuyruk TTL" icon="clock">
    **Durum:** Zamana duyarlı görevler\
    **Çözüm:** basicPropertiesExpiration=120000, priority düşürme\
    **Beklenen Sonuç:** Mesajlar 2 dakika sonra otomatik silinir
  </Card>

  <Card title="Düşük Gecikme İşleri" icon="zap">
    **Durum:** Hızlı komut iletimi\
    **Çözüm:** connectionFactoryRequestedHeartbeat=30, pool size=20\
    **Beklenen Sonuç:** Gecikme azalır, throughput artar
  </Card>
</CardGroup>

## Connection Yapılandırma

### Yeni RabbitMQ Bağlantısı Oluşturma

<img src="https://mintcdn.com/apinizer/YX1NcEKlSBeHefxE/images/yonetici/baglantilar/rabbitmq-variable-new.png?fit=max&auto=format&n=YX1NcEKlSBeHefxE&q=85&s=b5504493d100836a908473361806865d" alt="Image 2024 9 9 15 35 35 Pn" width="1000" className="mr-auto" data-path="images/yonetici/baglantilar/rabbitmq-variable-new.png" />

<Steps>
  <Step title="Oluşturma Sayfasına Gitme">
    Sol menüden **Connection → RabbitMQ Bağlantısı** bölümüne gidin.

    Sağ üstteki **\[+ Create]** butonuna tıklayın.
  </Step>

  <Step title="Temel Bilgileri Girme">
    **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.

    <Info>
      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](/tr/concepts/temel-kavramlar/dinamik-degiskenler) sayfasını inceleyebilirsiniz.
    </Info>
  </Step>

  <Step title="Environment (Ortam) Seçimi">
    Dropdown menüden ortam seçin: **Development**, **Test**, veya **Production**.

    Her ortam için farklı connection parametreleri tanımlanabilir.
  </Step>

  <Step title="Host ve Virtual Host Parametreleri">
    **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.
  </Step>

  <Step title="Kanal ve Mesaj Parametreleri">
    **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.
  </Step>

  <Step title="Timeout ve Connection Pool Ayarları">
    **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.
  </Step>

  <Step title="Güvenlik ve Authentication Ayarları">
    **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.
  </Step>

  <Step title="Test Connection">
    **\[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.
  </Step>

  <Step title="Kaydetme">
    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.

          <Check>
            Connection başarıyla oluşturuldu! Artık Integration Flow ve Connector adımlarında kullanabilirsiniz.
          </Check>
  </Step>
</Steps>

### Connection'ı Silme

Connection'ı silmek için:

<CardGroup cols={2}>
  <Card title="Yöntem 1: Liste Ekranından" icon="list">
    * Connection listesinde satır sonundaki **⋮** menüsünden **Delete** seçeneğini tıklayın.
    * Onay dialogunda silme işlemini onaylayın.
  </Card>

  <Card title="Silme İpuçları" icon="info-circle">
    **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.
  </Card>

  <Card title="Alternatif: Deaktif Etme" icon="toggle-off">
    * Silmek yerine connection'ın aktif durumunu pasif hale getirin.
    * Connection pasif olur ancak silinmez.
    * Gerektiğinde aktif hale getirerek yeniden kullanabilirsiniz.
  </Card>
</CardGroup>

### Connection'ı Dışa/İçe Aktarma

<Info>
  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.
</Info>

<AccordionGroup>
  <Accordion title="Dışa Aktarma (Export)">
    <CardGroup cols={2}>
      <Card title="Yöntem 1: Liste Ekranından" icon="list">
        * Connection listesinde satır sonundaki **⋮** menüsünden **Export** seçeneğini tıklayın.
        * ZIP dosyası otomatik olarak indirilir.
      </Card>

      <Card title="Dosya Formatı" icon="file-zipper">
        Format: `{Date}-rabbitMq-integration-{ConnectionName}-export.zip`\
        Örnek: `13 Nov 2025-rabbitMq-integration-Production_RabbitMQ-export.zip`
      </Card>

      <Card title="ZIP İçeriği" icon="folder-open">
        * Connection JSON dosyası
        * Metadata bilgileri
        * Bağımlılık bilgileri (örneğin sertifikalar, key store)
      </Card>

      <Card title="Kullanım Alanları" icon="list-check">
        * Yedekleme
        * Ortamlar arası taşıma (Test → Prod)
        * Versiyonlama
        * Ekip veya proje bazlı paylaşım
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="İçe Aktarma (Import)">
    <CardGroup cols={2}>
      <Card title="İçe Aktarma Adımları" icon="upload">
        * 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.
      </Card>

      <Card title="İçe Aktarma Senaryoları" icon="info-circle">
        **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.
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## Connection'ın Kullanım Alanları

<CardGroup cols={2}>
  <Card title="Connection Oluşturma ve Aktif Etme" icon="plus-circle">
    **Adımlar:**

    1. Connection'ı oluşturun
    2. Test Connection ile bağlantıyı doğrulayın
    3. Save and Deploy ile kaydedin ve etkinleştirin
    4. Connection'ın Enabled durumda olduğundan emin olun.
  </Card>

  <Card title="Integration / Connector Adımlarında Kullanım" icon="workflow">
    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.
  </Card>

  <Card title="Scheduled Job Kullanımı" icon="clock">
    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.
  </Card>

  <Card title="Test Amaçlı Kullanım" icon="check-circle">
    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.
  </Card>
</CardGroup>

## Best Practices

<AccordionGroup>
  <Accordion title="Yapılması Gerekenler ve En İyi Uygulamalar">
    <CardGroup cols={2}>
      <Card title="Cluster Ulaşılabilirliği" icon="activity">
        **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
      </Card>

      <Card title="Routing Key Yönetimi" icon="key">
        **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
      </Card>

      <Card title="Mesaj TTL Stratejisi" icon="clock">
        **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
      </Card>

      <Card title="Authentication Stratejisi" icon="lock">
        **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
      </Card>

      <Card title="Ortam Yönetimi" icon="layers">
        **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
      </Card>

      <Card title="Connection Test" icon="check-circle">
        **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
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Güvenlik En İyi Uygulamaları">
    <CardGroup cols={2}>
      <Card title="RabbitMQ Kullanıcı Yetkileri" icon="user-check">
        Kullanıcıya yalnızca gerekli vhost ve queue izinlerini verin; configure/write/read izinlerini ayrı ayrı yönetin
      </Card>

      <Card title="AMQP Sertifika Yönetimi" icon="shield">
        SSL/TLS etkinse broker sertifikalarını keystore'a ekleyin, expiration tarihlerini izleyin, yenilemeyi önceden planlayın
      </Card>

      <Card title="Audit ve Loglama" icon="file-text">
        Authentication hatalarını ve SSL negotiation loglarını merkezi log havuzuna gönderin, SIEM üzerinden alarm üretin
      </Card>

      <Card title="Kimlik Bilgileri Yönetimi" icon="key">
        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
      </Card>

      <Card title="SSL/TLS Kullanımı" icon="shield-check">
        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
      </Card>

      <Card title="Erişim Kontrolü" icon="lock">
        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
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Kaçınılması Gerekenler">
    <CardGroup cols={2}>
      <Card title="Tek Kuyruğa Aşırı Yükleme" icon="alert-triangle">
        **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
      </Card>

      <Card title="Heartbeat'i 0 Yapmak" icon="alert-triangle">
        **Neden kaçınılmalı:** Broker bağlantı kopmalarını tespit edemez\
        **Alternatif:** En az 30 saniyelik heartbeat kullanın
      </Card>

      <Card title="SSL Sertifikasını Paylaşmak" icon="alert-triangle">
        **Neden kaçınılmalı:** Sertifikanın kopyalanması güvenlik açığı yaratır\
        **Alternatif:** Her ortam için ayrı sertifika/credential kullanın
      </Card>

      <Card title="Production Connection'ı Test Ortamında Kullanma" icon="alert-triangle">
        **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\_)
      </Card>

      <Card title="Çok Düşük Timeout Değerleri" icon="alert-triangle">
        **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
      </Card>

      <Card title="Connection Pool Kullanmama" icon="alert-triangle">
        **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
      </Card>
    </CardGroup>
  </Accordion>

  <Accordion title="Performans İpuçları">
    <CardGroup cols={2}>
      <Card title="Mesaj Boyutu Yönetimi" icon="file">
        **Ö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
      </Card>

      <Card title="Routing Key Şablonları" icon="key">
        **Öneri:** `service.region.event` kalıbı kullanın\
        **Etki:** Tüketiciler pattern ile kolay filtreleme yapar, subscription sayısı düşer
      </Card>

      <Card title="Heartbeat Ayarı" icon="heart">
        **Öneri:** WAN bağlantılarında 60 sn, LAN'de 30 sn heartbeat kullanın\
        **Etki:** Kopmalar hızlı tespit edilir, gereksiz reconnect önlenir
      </Card>

      <Card title="Connection Pool Optimizasyonu" icon="database">
        **Ö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
      </Card>

      <Card title="Timeout Değerleri Optimizasyonu" icon="hourglass">
        **Ö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
      </Card>

      <Card title="Connection Monitoring" icon="activity">
        **Ö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
      </Card>
    </CardGroup>
  </Accordion>
</AccordionGroup>

## Sorun Giderme (Troubleshooting)

<AccordionGroup>
  <Accordion title="Message Rejected by Broker">
    <Warning>
      Yanlış routing key, exchange binding yok veya kullanıcının write izni yok olabilir.
    </Warning>

    <Steps>
      <Step title="Exchange/Queue Binding">
        Exchange/queue binding'lerini kontrol edin.
      </Step>

      <Step title="Routing Key Test">
        Routing key'i broker üzerinden test edin.
      </Step>

      <Step title="Kullanıcı İzinleri">
        Kullanıcı izinlerini güncelleyin.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="SSL Handshake Failure">
    <Warning>
      Yanlış TLS sürümü, sertifika zinciri eksik veya self-signed sertifika Production'da kullanılıyor olabilir.
    </Warning>

    <Steps>
      <Step title="TLS Sürümü">
        Broker desteklediği TLS sürümünü doğrulayın.
      </Step>

      <Step title="Sertifika Yükleme">
        Sertifikayı keystore'a yeniden yükleyin.
      </Step>

      <Step title="CA İmzalı Sertifika">
        Production'da CA imzalı sertifika kullanın.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Connection Timeout">
    <Warning>
      Network gecikmesi, hedef sistem yavaş yanıt veriyor veya timeout değeri çok düşük olabilir.
    </Warning>

    <Steps>
      <Step title="Network Kontrolü">
        Network connectivity kontrol edin.
      </Step>

      <Step title="Sistem Sağlığı">
        Hedef sistem sağlığını kontrol edin.
      </Step>

      <Step title="Timeout Ayarları">
        Timeout değerlerini artırın.
      </Step>

      <Step title="Log İnceleme">
        Connection loglarını inceleyin.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Authentication Failed">
    <Warning>
      Yanlış kullanıcı adı/şifre, expired credentials veya yetki problemi olabilir.
    </Warning>

    <Steps>
      <Step title="Kimlik Bilgileri">
        Kimlik bilgilerini doğrulayın.
      </Step>

      <Step title="Kullanıcı Durumu">
        Hedef sistemde kullanıcının aktif olduğunu kontrol edin.
      </Step>

      <Step title="Yetki Kontrolü">
        Gerekli yetkilerin verildiğini kontrol edin.
      </Step>

      <Step title="Sertifika Kontrolü">
        SSL/TLS sertifikalarını kontrol edin.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Pool Exhausted">
    <Warning>
      Pool size çok düşük, connection leak var veya trafik çok yüksek olabilir.
    </Warning>

    <Steps>
      <Step title="Pool Size">
        Pool size'ı artırın.
      </Step>

      <Step title="Connection Kontrolü">
        Connection'ların düzgün kapatıldığını kontrol edin.
      </Step>

      <Step title="Idle Timeout">
        Idle connection timeout'ları ayarlayın.
      </Step>

      <Step title="Metrik İzleme">
        Connection kullanım metriklerini izleyin.
      </Step>
    </Steps>
  </Accordion>

  <Accordion title="Connection Test Başarılı Ama Entegrasyon Akışı Hata Veriyor">
    <Warning>
      Integration/Connector adımında farklı connection seçili olabilir, adım yanlış yapılandırılmış olabilir veya Flow/Job redeploy edilmemiş olabilir.
    </Warning>

    <Steps>
      <Step title="Enable Toggle">
        Connection'ın enable toggle'ının aktif olduğunu kontrol edin.
      </Step>

      <Step title="Connection Seçimi">
        Integration Flow'da doğru connection'ın seçildiğini doğrulayın.
      </Step>

      <Step title="Connection Deploy">
        Connection'ı tekrar deploy edin.
      </Step>

      <Step title="Flow/Job Deploy">
        Integration Flow veya Job'ı redeploy edin.
      </Step>

      <Step title="Log Kontrolü">
        Gateway loglarını kontrol edin.
      </Step>
    </Steps>
  </Accordion>
</AccordionGroup>

## Sık Sorulan Sorular (SSS)

<AccordionGroup>
  <Accordion title="Aynı RabbitMQ Bağlantısı ile hem log hem de iş verisi gönderebilir miyim?">
    <Info>
      Evet, ancak routing key ve basic properties alanlarını farklı Integration Flow adımlarında özelleştirmek gerekir.
    </Info>
  </Accordion>

  <Accordion title="Host listesinde IP yerine DNS kullanmak zorunda mıyım?">
    <Info>
      Hayır, IP de kullanılabilir fakat DNS kullanımı node değişikliklerinde bakım maliyetini düşürür.
    </Info>
  </Accordion>

  <Accordion title="Heartbeat değerini nasıl seçmeliyim?">
    <Info>
      WAN ortamlarında 60 sn, LAN'de 30 sn önerilir; broker ve client aynı değeri kullanmalıdır.
    </Info>
  </Accordion>

  <Accordion title="TLSv1.3 destekleniyor mu?">
    <Info>
      Broker ve JVM sürümünüz destekliyorsa connectionFactorySslProtocol alanına `TLSv1.3` yazabilirsiniz.
    </Info>
  </Accordion>

  <Accordion title="Mesaj TTL'ini ortam bazlı farklılaştırabilir miyim?">
    <Info>
      Evet, Environment seçimi sonrası basicPropertiesExpiration değerini ortam için güncelleyebilirsiniz.
    </Info>
  </Accordion>

  <Accordion title="Aynı connection'ı birden fazla Integration Flow'da kullanabilir miyim?">
    <Check>
      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.
    </Check>
  </Accordion>

  <Accordion title="Connection pool kullanmak zorunlu mudur?">
    <Info>
      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.
    </Info>
  </Accordion>

  <Accordion title="Test ve Production için farklı connection'lar mı oluşturmalıyım?">
    <Check>
      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.
    </Check>
  </Accordion>

  <Accordion title="Test Connection başarılı ama Integration Flow'da çalışmıyor, neden?">
    <Warning>
      Birkaç neden olabilir:
    </Warning>

    1. Connection enable toggle'ı pasif olabilir
    2. Integration adımında farklı bir connection seçili olabilir
    3. Connection deploy edilmemiş olabilir
    4. Integration Flow henüz redeploy edilmemiş olabilir
  </Accordion>
</AccordionGroup>
