Service communication
- Node.js kursu
- İleri seviye
- Ders 50/83
- 5 dk
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
// callOrderService asenkron fonksiyonunu tanımla
// buraya yaz
// "fetch hazır" yazdır
// buraya yazÖrnek çözüm
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
const res = await ____("/orders");
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?
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.