← Kursa Dön
💻

Service Discovery Simulasyonu

Orta
100 puan · Java

HashMap tabanlı basit bir Service Registry implementasyonu yapın. Servisler register/deregister olabilmeli, discover ile bulunabilmeli ve health check ile sağlık durumları kontrol edilebilmelidir.

📋 Talimatlar

Service Discovery Simulasyonu

Mikroservis mimarisinde Service Discovery, servislerin birbirini dinamik olarak bulmasını sağlayan temel bir bileşendir. Bu ödevde HashMap tabanlı basit bir ServiceRegistry sınıfı implement edeceksiniz.

Gereksinimler

ServiceInstance — Bir servis instance'ını temsil eder:

  • serviceName (String) — Servis adı (örn: "user-service")
  • instanceId (String) — Benzersiz instance ID (örn: "user-service-1")
  • host (String) — Host adresi (örn: "192.168.1.10")
  • port (int) — Port numarası
  • healthy (boolean) — Sağlık durumu (varsayılan: true)

ServiceRegistry sınıfı şu metotları içermelidir:

  1. void register(ServiceInstance instance) — Yeni instance kaydeder. Aynı instanceId ile tekrar register yapılırsa üzerine yazar.
  2. void deregister(String instanceId) — Instance kaydını siler.
  3. List<ServiceInstance> discover(String serviceName) — Verilen servis adına ait sağlıklı (healthy=true) instance'ları döner. Instance ID'ye göre alfabetik sırala. Yoksa boş liste döner.
  4. void markUnhealthy(String instanceId) — Instance'ı unhealthy olarak işaretler.
  5. void markHealthy(String instanceId) — Instance'ı healthy olarak işaretler.
  6. String healthCheck(String instanceId) — Instance durumunu döner: "HEALTHY", "UNHEALTHY", veya "NOT_FOUND".

Girdi Formatı

Program stdin'den satır satır komutlar okur:

  • REGISTER serviceName instanceId host port — Instance kaydet
  • DEREGISTER instanceId — Instance sil
  • DISCOVER serviceName — Sağlıklı instance'ları listele
  • MARK_UNHEALTHY instanceId — Unhealthy yap
  • MARK_HEALTHY instanceId — Healthy yap
  • HEALTH instanceId — Sağlık durumunu kontrol et
  • EXIT — Programı sonlandır

Çıktı

  • DISCOVER: Her sağlıklı instance için instanceId@host:port formatında satır yazdır. Hiç yoksa NO_INSTANCES yazdır.
  • HEALTH: HEALTHY, UNHEALTHY veya NOT_FOUND yazdır.
  • Diğer komutlar çıktı üretmez.

Örnek

REGISTER user-service us-1 192.168.1.10 8080
REGISTER user-service us-2 192.168.1.11 8080
DISCOVER user-service
→ us-1@192.168.1.10:8080
→ us-2@192.168.1.11:8080
MARK_UNHEALTHY us-1
DISCOVER user-service
→ us-2@192.168.1.11:8080
HEALTH us-1
→ UNHEALTHY

🧪 Örnek Test Senaryoları

Girdi
REGISTER user-service us-1 192.168.1.10 8080
REGISTER user-service us-2 192.168.1.11 8080
DISCOVER user-service
EXIT
Beklenen Çıktı
us-1@192.168.1.10:8080
us-2@192.168.1.11:8080
Girdi
REGISTER order-service os-1 10.0.0.1 9090
MARK_UNHEALTHY os-1
DISCOVER order-service
HEALTH os-1
EXIT
Beklenen Çıktı
NO_INSTANCES
UNHEALTHY
Girdi
REGISTER api-gw gw-1 10.0.0.5 443
DEREGISTER gw-1
HEALTH gw-1
DISCOVER api-gw
EXIT
Beklenen Çıktı
NOT_FOUND
NO_INSTANCES
Girdi
REGISTER payment-service ps-1 10.0.1.1 8080
REGISTER payment-service ps-2 10.0.1.2 8080
MARK_UNHEALTHY ps-1
MARK_HEALTHY ps-1
DISCOVER payment-service
HEALTH ps-1
EXIT
Beklenen Çıktı
ps-1@10.0.1.1:8080
ps-2@10.0.1.2:8080
HEALTHY

💡 İpuçları

Main.java
✓ Çözüm yüklendi
puan

                    
Ln 1, Col 1 · JAVA · UTF-8
Wandbox