CodeBlanks Logo Icon CodeBlanks

Mikro hizmet temeli

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

Main.java
@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

Main.java
@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

Soru
registry.put(____, new HelloService());
Cevap
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

Uzman bölümündeki tüm dersler