Ana içeriğe geç

Mesaj Kuyruğu

İngilizcesi
Message Queue
Okunuşu
mesic kyu

Günlük kullanımda iki ad da yaygın.

Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/message-queue

Kısaca

Mesaj kuyruğu, bir servisten gelen mesajları bir başkası işlemeye hazır olana kadar saklayan ve sistemin parçalarını eşzamansız çalıştıran bir bileşendir.

Mesaj kuyruğu (message queue) nedir?

Mesaj kuyruğu, bir sistemin bir parçasının (üretici, producer), mesajı işleyen parçayı (tüketici, consumer) beklemeden mesaj göndermesini sağlar. Kuyruk her mesajı, bir tüketici onu alıp işleyene ve onaylayana kadar güvenle saklar; ardından mesaj kaldırılır. Mesajlar genellikle bir görevi ya da olayı tanımlayan JSON gibi küçük veri parçalarıdır.

Bu, sistemi eşzamansız ve gevşek bağlı hale getirir: üretici ile tüketicinin aynı anda ya da aynı hızda çalışması gerekmez. Aniden bir sipariş yoğunluğu geldiğinde mesajlar kuyrukta bekler, worker'lar onları sabit bir hızda işler ve daha hızlı olmak için daha fazla worker ekleyebilirsiniz. Popüler araçlar arasında RabbitMQ, Amazon SQS, Redis tabanlı iş kuyrukları ve teknik olarak dağıtık bir log olan ancak çoğunlukla benzer işler için kullanılan Apache Kafka bulunur.

Restoran mutfağındaki sipariş rayını düşünün: garsonlar fişleri raya iliştirip masalarına döner, aşçılar da müsait oldukça fişleri tek tek alır. Mesaj kuyrukları genellikle e-posta göndermek, görüntü ve video işlemek, ödemeleri yürütmek ve mikroservisler arasında olay iletmek için kullanılır.

Çoğu kuyruk en az bir kez (at-least-once) teslimat garantisi verir; yani bir tüketici onaylamadan önce çökerse bir mesaj ara sıra iki kez gelebilir. Bu nedenle tüketiciler idempotent olmalıdır; yani aynı mesajı iki kez işlemek bir kez işlemekle aynı etkiyi yaratmalıdır. Sürekli başarısız olan mesajlar ise incelenmek üzere genellikle bir dead-letter kuyruğuna taşınır. Kuyruk, yayın-abonelik (pub/sub) modelinden de farklıdır: kuyrukta her mesaj tek bir tüketici tarafından işlenirken pub/sub her abonenin mesajın bir kopyasını almasını sağlar.

Bir bakışta

İki üretici, M4, M3, M2 ve M1'i tutan bir kuyruğun arkasına mesaj ekler; 1. tüketici M1'i önden alır ve onaylar, böylece M1 kaldırılır; 2. tüketici ise M2'yi alır.M5M1M2ackÜreticiÜreticiKuyrukM4M3M2M1Tüketici 1Tüketici 2
Üreticiler beklemez: mesajlar kuyrukta sırayla durur; bir tüketici mesajı işleyip ack gönderene kadar silinmez.

Önemli noktalar

  • Üreticiler mesaj gönderir; tüketiciler bunları sonra, kendi hızlarında işler.
  • Kuyruk, servisleri birbirinden ayırır ve trafik artışlarını emer.
  • Tüketiciler mesajları işledikten sonra onaylar; böylece çökerlerse iş kaybolmaz.
  • En az bir kez teslimat, mesaj işleyicilerin idempotent olması gerektiği anlamına gelir.
  • Kuyrukta her mesaj tek bir tüketiciye gider; pub/sub'da her abone bir kopya alır.

Örnek

RabbitMQ ile iş üretmek ve tüketmekjavascript
// RabbitMQ via the amqplib package
const channel = await connection.createChannel();
await channel.assertQueue("emails", { durable: true });

// Producer: put a job on the queue and move on without waiting
const job = { to: "ada@example.com", template: "welcome" };
channel.sendToQueue("emails", Buffer.from(JSON.stringify(job)), { persistent: true });

// Consumer: take one job at a time and acknowledge it when done
await channel.prefetch(1);
await channel.consume("emails", async (msg) => {
  const task = JSON.parse(msg.content.toString());
  await sendEmail(task.to, task.template);
  channel.ack(msg); // only now is the message removed from the queue
});

Sık sorulan sorular

Mesaj kuyruğu ile mesaj aracısı (message broker) arasındaki fark nedir?

Mesaj aracısı, mesajları alan, saklayan ve yönlendiren RabbitMQ gibi sunucu yazılımıdır. Mesaj kuyruğu ise bir aracının yönettiği yapılardan biridir; yine de insanlar bu iki terimi sıklıkla birbirinin yerine kullanır.

Kafka bir mesaj kuyruğu mudur?

Kafka öncelikle, mesajları teslimattan sonra silmek yerine sıralı ve yeniden oynatılabilir bir logda tutan dağıtık bir olay akışı (event streaming) platformudur. Sıklıkla mesaj kuyruğuyla aynı işler için kullanılır, ancak tüketiciler kendi konumlarını izler ve birçok bağımsız tüketici grubu aynı veriyi okuyabilir.

Bir servisi doğrudan çağırmak yerine neden mesaj kuyruğu kullanılır?

Kuyruk, çağıranın yavaş işi beklemek yerine hemen yanıt vermesini sağlar, alıcı servis kapalıyken mesajları güvende tutar ve trafik artışlarını yumuşatır. Bedeli ise ek altyapı ile gecikmeleri ve yinelenen mesajları yönetme ihtiyacıdır.

Sık karşılaştırılanlar

İlgili sayfalar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar