CodeBlanks Logo Icon CodeBlanks

Service communication

Servisler arası HTTP iletişimini öğrenirsin.

Service communication

Servisler birbirleriyle HTTP üzerinden haberleşir. Çağrı yapan servis (caller) diğer servise bir istek atar ve yanıtı bekler. Node.js'te bunun için http.request veya fetch kullanılır.

Örnek: kullanıcı servisi, sipariş servisine http.get("http://siparis-servisi:3001/orders") ile istek atar. Yanıt geldiğinde kullanıcı servisi veriyi işler. Senkron HTTP çağrısı basittir; ama çağrılan servis yavaşsa caller da yavaşlar. Bu yüzden büyük sistemlerde mesaj kuyruğu (RabbitMQ, Kafka) tercih edilir. HTTP, istemci-sunucu modeline uyar; mesaj kuyruğu ise asenkrondur ve çağrılan servisin o an ayakta olmasını gerektirmez. Doğru seçim, gecikme ve güvenilirlik ihtiyacına bağlıdır.

Senkron vs asenkron iletişim

Senkron iletişimde caller yanıtı bekler (HTTP). Asenkron iletişimde caller mesajı kuyruğa bırakır ve devam eder (mesaj kuyruğu). Her desenin kendi trade-off'u vardır.

Senkron HTTP'de çağrılan servis kapalıysa caller da hata alır. Asenkron kuyrukta ise mesaj kuyrukta bekler; servis ayakta olunca işlenir. Senkron, hızlı geri bildirim gerektiren işler için (kullanıcı sorgusu) uygundur. Asenkron, uzun süren işler (e-posta gönderme, rapor hazırlama) için uygundur. Birçok sistem ikisini birlikte kullanır: kullanıcı sorguları senkron, arka plan işleri asenkron. Doğru karışım, kullanıcı deneyimini ve sistem güvenilirliğini dengeler.

Uygulama fetch ile servis çağrısı yaz

Bir callOrderService asenkron fonksiyonu tanımla. await fetch("http://localhost:3001/orders") ile istek at ve res.json() ile gövdeyi döndür. console.log ile "fetch hazır" yaz.

Başlangıç kodu

index.js
// callOrderService asenkron fonksiyonunu tanımla
// buraya yaz

// "fetch hazır" yazdır
// buraya yaz

Örnek çözüm

index.js
async function callOrderService() {
  const res = await fetch("http://localhost:3001/orders");
  return res.json();
}
console.log("fetch hazır");

Beklenen çıktı

fetch hazır

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 HTTP istek metodunu tamamla

Soru
const res = await ____("/orders");
Cevap
const res = await fetch("/orders");

Açıklama: fetch ile HTTP isteği atılır.

2 İletişim desenini özelliğine eşle

Kavram Anlamı
senkron HTTP Yanıt bekler
asenkron kuyruk Kuyruğa bırakır
fetch HTTP isteği atar
RabbitMQ Mesaj kuyruğu

3 Asenkron iletişim ne zaman tercih edilir?

index.js
queue.push(job) → worker
  • Anında yanıt gerektiğinde
  • Yalnızca hata ayıklamada
  • Uzun süren arka plan işlerinde Doğru cevap
  • Yalnızca tek makineli sistemlerde

Açıklama: Uzun süren işlerde asenkron tercih edilir.

İleri seviye bölümündeki tüm dersler