Java
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.
Örnek çözümü göster
@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;"));
}
}
Kendini test et
-
kayıt ekleme çağrısını tamamla
registry.put(____, new HelloService());
Cevabı göster
registry.put("hello", new HelloService());
-
Registry deseni ne sağlar?
- Sınıf derleme
- Ad→örnek eşleme
- Thread havuzu
- Dosya okuma
Cevabı göster
Ad→örnek eşleme — Registry ad ile örnek eşlemesi tutar.
-
mikro hizmet öğelerini eşleştir
- Registry
- Hizmet kaydı
- @Service
- Hizmet işareti
- NativeBridge
- Yerel çağrı
- put
- Kayıt ekleme
Sıradaki ders: Birleştirme