💻
Orta
Service Discovery Simulasyonu
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:
void register(ServiceInstance instance)— Yeni instance kaydeder. Aynı instanceId ile tekrar register yapılırsa üzerine yazar.void deregister(String instanceId)— Instance kaydını siler.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.void markUnhealthy(String instanceId)— Instance'ı unhealthy olarak işaretler.void markHealthy(String instanceId)— Instance'ı healthy olarak işaretler.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 kaydetDEREGISTER instanceId— Instance silDISCOVER serviceName— Sağlıklı instance'ları listeleMARK_UNHEALTHY instanceId— Unhealthy yapMARK_HEALTHY instanceId— Healthy yapHEALTH instanceId— Sağlık durumunu kontrol etEXIT— Programı sonlandır
Çıktı
DISCOVER: Her sağlıklı instance içininstanceId@host:portformatında satır yazdır. Hiç yoksaNO_INSTANCESyazdır.HEALTH:HEALTHY,UNHEALTHYveyaNOT_FOUNDyazdı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ı
İpucu 1: HashMap'de instanceId'yi key olarak kullanın — register/deregister/health check O(1) olur.
İpucu 2: discover() için stream().filter().sorted().collect() zinciri kullanın.
İpucu 3: Comparator.comparing(i -> i.instanceId) ile alfabetik sıralama yapabilirsiniz.
İpucu 4: markUnhealthy/markHealthy'de null check yapmayı unutmayın — olmayan instance için hata fırlatmayın.
☕
Main.java
✓ Çözüm yüklendi
puan
Testleri çalıştırmak için kodunuzu gönderin
✅ Tüm testler geçti! Tebrikler!
Beklenen:
Sonuç:
Ln 1, Col 1
·
JAVA
·
UTF-8
Wandbox