Mikro hizmet temeli
- Java kursu
- Uzman
- Ders 45/46
- 6 dk
HTTP tabanlı küçük bir mikro hizmet iskeletini yazarsın.
servis kaydı deseni
Mikro hizmet temeli, @Service ile işaretli sınıfları adıyla tutan bir Registry ile başlar. Registry bir Map tutar; put(name, instance) ekler, get(name) bulur. Bu, bağımlılık enjeksiyonunun özüdür.
Bu projede Registry'ye HelloService örneğini "hello" adıyla ekleyeceksin. Sonraki derste bu kayıt, birleştirme adımında kullanılır.
yerel köprü
NativeBridge, bir yerel çağrının C işlev adını üreten sınıftır. describe(cls, method, sig) metodu "Java_" + cls + "_" + method + sig döndürür. Bu, JNI adlandırmasını modeller; gerçek çağrı yapılmaz.
Bu model, hangi sınıf ve metodun yerel koda bağlanacağını belirlemek için kullanılır. Birleştirme adımında NativeBridge, servis kaydıyla birlikte çalışır.
Uygulama Registry ve NativeBridge sınıflarını yaz
Üstteki yapıya class Registry ekle; java.util.Map<String, Object> alanı ve void put(String name, Object instance) ile Object get(String name) metotları olsun. class NativeBridge ekle; static String describe(String cls, String method, String sig) metodu "Java_" + cls + "_" + method + sig döndürsün. main içinde Registry registry = new Registry(); oluştur, registry.put("hello", new HelloService()); çağır ve System.out.println(NativeBridge.describe("HelloService", "greet", "()Ljava/lang/String;")); yazdır.
Başlangıç kodu
@interface Service {}
@Service
class HelloService {
String greet() { return "hello"; }
}
interface Subscriber {
void onNext(String item);
}
class SimplePublisher {
java.util.List<Subscriber> subs = new java.util.ArrayList<>();
void subscribe(Subscriber s) { subs.add(s); }
void publish(String item) {
for (Subscriber s : subs) s.onNext(item);
}
}
class TimedPublisher {
SimplePublisher delegate;
TimedPublisher(SimplePublisher delegate) {
this.delegate = delegate;
}
void publish(String item) {
long start = System.nanoTime();
delegate.publish(item);
long elapsed = System.nanoTime() - start;
System.out.println("elapsed measured: " + (elapsed >= 0));
}
}
public class Main {
public static void main(String[] args) {
SimplePublisher p = new SimplePublisher();
p.subscribe(s -> System.out.println("got: " + s));
new TimedPublisher(p).publish("hello");
}
}Örnek çözüm
@interface Service {}
@Service
class HelloService {
String greet() { return "hello"; }
}
interface Subscriber {
void onNext(String item);
}
class SimplePublisher {
java.util.List<Subscriber> subs = new java.util.ArrayList<>();
void subscribe(Subscriber s) { subs.add(s); }
void publish(String item) {
for (Subscriber s : subs) s.onNext(item);
}
}
class TimedPublisher {
SimplePublisher delegate;
TimedPublisher(SimplePublisher delegate) {
this.delegate = delegate;
}
void publish(String item) {
long start = System.nanoTime();
delegate.publish(item);
long elapsed = System.nanoTime() - start;
System.out.println("elapsed measured: " + (elapsed >= 0));
}
}
class Registry {
java.util.Map<String, Object> services = new java.util.HashMap<>();
void put(String name, Object instance) { services.put(name, instance); }
Object get(String name) { return services.get(name); }
}
class NativeBridge {
static String describe(String cls, String method, String sig) {
return "Java_" + cls + "_" + method + sig;
}
}
public class Main {
public static void main(String[] args) {
Registry registry = new Registry();
registry.put("hello", new HelloService());
System.out.println(NativeBridge.describe("HelloService", "greet", "()Ljava/lang/String;"));
}
}Beklenen çıktı
Java_HelloService_greet()Ljava/lang/String;
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 kayıt ekleme çağrısını tamamla
registry.put(____, new HelloService());
registry.put("hello", new HelloService());
Açıklama: registry.put("hello", new HelloService()); kaydı ekler.
2 Registry deseni ne sağlar?
- Sınıf derleme
- Ad→örnek eşleme Doğru cevap
- Thread havuzu
- Dosya okuma
Açıklama: Registry ad ile örnek eşlemesi tutar.
3 mikro hizmet öğelerini eşleştir
| Kavram | Anlamı |
|---|---|
Registry |
Hizmet kaydı |
@Service |
Hizmet işareti |
NativeBridge |
Yerel çağrı |
put |
Kayıt ekleme |