Skip to content

Message Queue Genel Bakış

Giriş

Message Queue (Mesaj Kuyruğu), uygulamalar arasında asenkron iletişim sağlayan bir sistemdir. Bu sistem, uygulamaların birbirleriyle gevşek bağlı (loosely coupled) bir şekilde iletişim kurmasını sağlar.

Message Queue Nedir?

Message Queue, mesajların gönderildiği ve alındığı bir ara katmandır. Bu sistem: - Asenkron iletişim sağlar - Uygulamalar arası bağımlılığı azaltır - Ölçeklenebilirlik sağlar - Hata toleransı sunar - Yük dengeleme yapar

Message Queue Kullanım Senaryoları

  1. Asenkron İşlemler
  2. Uzun süren işlemler
  3. Arka plan görevleri
  4. Bildirim gönderimi

  5. Mikroservis İletişimi

  6. Servisler arası iletişim
  7. Event-driven mimari
  8. Servis entegrasyonu

  9. Yük Dengeleme

  10. İş yükü dağıtımı
  11. Trafik yönetimi
  12. Kaynak optimizasyonu

  13. Hata Toleransı

  14. Sistem kesintilerinde veri kaybını önleme
  15. Yeniden deneme mekanizmaları
  16. Veri tutarlılığı

Popüler Message Queue Sistemleri

  1. RabbitMQ
  2. Açık kaynak
  3. AMQP protokolü
  4. Kolay kurulum ve yönetim
  5. .NET entegrasyonu

  6. Apache Kafka

  7. Yüksek performans
  8. Dağıtık sistem
  9. Event streaming
  10. Büyük veri işleme

Message Queue Seçim Kriterleri

  1. Performans
  2. Mesaj işleme hızı
  3. Gecikme süresi
  4. Ölçeklenebilirlik

  5. Güvenilirlik

  6. Veri kaybı riski
  7. Hata toleransı
  8. Yeniden deneme mekanizmaları

  9. Özellikler

  10. Protokol desteği
  11. Yönetim araçları
  12. Monitoring
  13. Güvenlik

  14. Entegrasyon

  15. .NET desteği
  16. API kalitesi
  17. Dokümantasyon
  18. Topluluk desteği

Message Queue Best Practices

  1. Mesaj Tasarımı
  2. Anlamlı mesaj yapısı
  3. Versiyonlama
  4. Serileştirme formatı

  5. Hata Yönetimi

  6. Retry mekanizmaları
  7. Dead letter queue
  8. Hata loglama

  9. Performans Optimizasyonu

  10. Batch işlemler
  11. Mesaj boyutu
  12. Queue yapılandırması

  13. Monitoring

  14. Queue durumu
  15. Performans metrikleri
  16. Hata takibi

Mülakat Soruları

Temel Sorular

  1. Message Queue nedir ve neden kullanılır?
  2. Cevap: Message Queue, uygulamalar arasında asenkron iletişim sağlayan bir sistemdir. Kullanım nedenleri:

    • Asenkron işlemler
    • Uygulama bağımsızlığı
    • Ölçeklenebilirlik
    • Hata toleransı
    • Yük dengeleme
  3. Message Queue sistemlerinin temel bileşenleri nelerdir?

  4. Cevap:

    • Producer (Üretici)
    • Consumer (Tüketici)
    • Queue (Kuyruk)
    • Exchange (Değişim)
    • Routing Key (Yönlendirme Anahtarı)
    • Message (Mesaj)
  5. Message Queue sistemlerinde hangi protokoller kullanılır?

  6. Cevap:

    • AMQP (Advanced Message Queuing Protocol)
    • MQTT (Message Queuing Telemetry Transport)
    • STOMP (Streaming Text Oriented Messaging Protocol)
    • HTTP/HTTPS
    • WebSocket
  7. Message Queue sistemlerinde mesaj garantisi nasıl sağlanır?

  8. Cevap:

    • ACK (Acknowledgment) mekanizması
    • Persistence (Kalıcılık)
    • Transaction desteği
    • Retry mekanizması
    • Dead letter queue
  9. Message Queue sistemlerinde yük dengeleme nasıl yapılır?

  10. Cevap:
    • Round-robin dağıtım
    • Work queue pattern
    • Consumer grupları
    • Queue partitioning
    • Load balancing algoritmaları

Teknik Sorular

  1. RabbitMQ'da Exchange tipleri nelerdir?
  2. Cevap:

    • Direct Exchange
    • Fanout Exchange
    • Topic Exchange
    • Headers Exchange
  3. Kafka'da Partition ve Replication kavramları nedir?

  4. Cevap:

    • Partition: Topic'in parçalara bölünmesi
    • Replication: Partition'ların kopyalanması
    • Leader/Follower yapısı
    • ISR (In-Sync Replicas)
  5. Message Queue sistemlerinde mesaj serileştirme nasıl yapılır?

  6. Cevap:

    • JSON
    • XML
    • Protocol Buffers
    • Avro
    • MessagePack
  7. Message Queue sistemlerinde monitoring nasıl yapılır?

  8. Cevap:

    • Queue metrikleri
    • Consumer metrikleri
    • Producer metrikleri
    • Hata oranları
    • Gecikme süreleri
  9. Message Queue sistemlerinde güvenlik nasıl sağlanır?

  10. Cevap:
    • SSL/TLS
    • Authentication
    • Authorization
    • ACL (Access Control List)
    • Network izolasyonu

Pratik Sorular

  1. RabbitMQ'da basit bir producer ve consumer nasıl oluşturulur?
  2. Cevap:

    // Producer
    using var connection = factory.CreateConnection();
    using var channel = connection.CreateModel();
    
    channel.QueueDeclare(queue: "hello",
                         durable: false,
                         exclusive: false,
                         autoDelete: false,
                         arguments: null);
    
    var message = "Hello World!";
    var body = Encoding.UTF8.GetBytes(message);
    
    channel.BasicPublish(exchange: "",
                         routingKey: "hello",
                         basicProperties: null,
                         body: body);
    
    // Consumer
    var factory = new ConnectionFactory() { HostName = "localhost" };
    using var connection = factory.CreateConnection();
    using var channel = connection.CreateModel();
    
    channel.QueueDeclare(queue: "hello",
                         durable: false,
                         exclusive: false,
                         autoDelete: false,
                         arguments: null);
    
    var consumer = new EventingBasicConsumer(channel);
    consumer.Received += (model, ea) =>
    {
        var body = ea.Body.ToArray();
        var message = Encoding.UTF8.GetString(body);
        Console.WriteLine($"Received: {message}");
    };
    
    channel.BasicConsume(queue: "hello",
                         autoAck: true,
                         consumer: consumer);
    

  3. Kafka'da basit bir producer ve consumer nasıl oluşturulur?

  4. Cevap:
    // Producer
    var config = new ProducerConfig
    {
        BootstrapServers = "localhost:9092"
    };
    
    using var producer = new ProducerBuilder<Null, string>(config).Build();
    
    var message = new Message<Null, string>
    {
        Value = "Hello World!"
    };
    
    await producer.ProduceAsync("test-topic", message);
    
    // Consumer
    var config = new ConsumerConfig
    {
        BootstrapServers = "localhost:9092",
        GroupId = "test-group",
        AutoOffsetReset = AutoOffsetReset.Earliest
    };
    
    using var consumer = new ConsumerBuilder<Ignore, string>(config).Build();
    consumer.Subscribe("test-topic");
    
    while (true)
    {
        var result = consumer.Consume();
        Console.WriteLine($"Received: {result.Message.Value}");
    }
    

İleri Seviye Sorular

  1. Message Queue sistemlerinde CAP teoremi nasıl uygulanır?
  2. Cevap:

    • Consistency (Tutarlılık)
    • Availability (Erişilebilirlik)
    • Partition Tolerance (Bölünme Toleransı)
    • Trade-off'lar
    • Sistem seçimi
  3. Message Queue sistemlerinde ölçeklendirme stratejileri nelerdir?

  4. Cevap:

    • Horizontal scaling
    • Vertical scaling
    • Sharding
    • Partitioning
    • Load balancing
  5. Message Queue sistemlerinde veri kaybı nasıl önlenir?

  6. Cevap:

    • Persistence
    • Replication
    • ACK mekanizması
    • Transaction
    • Backup stratejileri
  7. Message Queue sistemlerinde performans optimizasyonu nasıl yapılır?

  8. Cevap:

    • Batch processing
    • Compression
    • Caching
    • Queue tuning
    • Network optimizasyonu
  9. Message Queue sistemlerinde monitoring ve alerting nasıl yapılır?

  10. Cevap:
    • Metrik toplama
    • Logging
    • Alerting kuralları
    • Dashboard
    • Trend analizi