3つの場合は考えられません。
- Lagom サービスは、同じクラスター内の別の Lagom サービスを消費します
- Lagom サービスは、別のクラスター内の別の Lagom サービスを消費します
- Lagom サービスは外部の非 Lagom サービスを消費します
- 外部の非 Lagom サービスが Lagom サービスを使用する
1. Lagom サービスは、同じクラスター内の別の Lagom サービスを消費します。
この場合のアプローチは、ServiceAImpl に注入される具体的な実装にバインドされている ServiceB API に ServiceAImpl が依存するというものです。
import com.google.inject.AbstractModule;
import com.lightbend.lagom.javadsl.server.ServiceGuiceSupport;
import docs.services.HelloService;
public class Module extends AbstractModule implements ServiceGuiceSupport {
protected void configure() {
bindClient(HelloService.class);
}
}
public class MyServiceImpl implements MyService {
private final HelloService helloService;
@Inject
public MyServiceImpl(HelloService helloService) {
this.helloService = helloService;
}
@Override
public ServiceCall<NotUsed, NotUsed, String> sayHelloLagom() {
return (id, msg) -> {
CompletionStage<String> response = helloService.sayHello().invoke("Lagom");
return response.thenApply(answer ->
"Hello service said: " + answer
);
};
}
}
私の理解が正しければ、このようにサービス API を使用するには、両方のクライアントが同じクラスター内にある必要があります。しかし、ラゴムは言います
クラスタは、同じサービスを実行しているノードのみにまたがる必要があります。
この場合、2 つの異なるタイプのサービスがあります。
- 「同じサービス」とは、API が外部サービスに公開されている最上位のサービスを意味しますか?
- Lagom 1 Microservice = 外部 API を使用した 1 つのサービス + n 内部サービス?
2. Lagom サービスは、別のクラスター内の別の Lagom サービスを消費します。
ドキュメントには次のように書かれています:
通信したいサービスが実際に Lagom サービスである場合は、外部 Lagom プロジェクトとの統合に関するドキュメントを読むことをお勧めします。
外部 Lagom サービスの IP とポートではなく、サービス API への依存関係のみが構成されているのはなぜですか?
3. Lagom サービスが外部の非 Lagom サービスを使用する
最初に、各外部サービスを Service Locator に登録する必要があります。http://localhost:3333 で実行されている weather という名前の外部サービスを登録するとします。ビルドに追加する内容は次のとおりです。
lagomUnmanagedServices in ThisBuild := Map("weather" -> "http://localhost:3333")
そのIPとの契約は何ですか?その背後にあるものは何ですか?
4. 外部の非 Lagom サービスが Lagom サービスを使用する
Lagom が自己登録パターンをサポートするまで、サードパーティ登録パターンを使用する必要がありますか?