Node.js
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.
Örnek çözümü göster
async function callOrderService() {
const res = await fetch("http://localhost:3001/orders");
return res.json();
}
console.log("fetch hazır");
Kendini test et
-
HTTP istek metodunu tamamla
const res = await ____("/orders");
Cevabı göster
const res = await fetch("/orders");
-
İletişim desenini özelliğine eşle
- senkron HTTP
- Yanıt bekler
- asenkron kuyruk
- Kuyruğa bırakır
- fetch
- HTTP isteği atar
- RabbitMQ
- Mesaj kuyruğu
-
Asenkron iletişim ne zaman tercih edilir?
queue.push(job) → worker
- Anında yanıt gerektiğinde
- Yalnızca hata ayıklamada
- Uzun süren arka plan işlerinde
- Yalnızca tek makineli sistemlerde
Cevabı göster
Uzun süren arka plan işlerinde — Uzun süren işlerde asenkron tercih edilir.
Sıradaki ders: API gateway