2

3つの場合は考えられません。

  1. Lagom サービスは、同じクラスター内の別の Lagom サービスを消費します
  2. Lagom サービスは、別のクラスター内の別の Lagom サービスを消費します
  3. Lagom サービスは外部の非 Lagom サービスを消費します
  4. 外部の非 Lagom サービスが Lagom サービスを使用する

1. Lagom サービスは、同じクラスター内の別の Lagom サービスを消費します。

この場合のアプローチは、ServiceAImpl に注入される具体的な実装にバインドされている ServiceB API に ServiceAImpl が依存するというものです。

ServiceB バインディング:

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);
    }
}

ServiceA の実装:

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 が自己登録パターンをサポートするまで、サードパーティ登録パターンを使用する必要がありますか?

4

1 に答える 1

2

Lagom が「クラスター」について話すとき、それは Akka クラスターを指しています。各サービスは Akka クラスターとしてデプロイできます。つまり、サービスはノードのクラスターである可能性があります。したがって、クラスター内に複数のサービスはありません。クラスター化されたサービスは 1 つだけです。

Lagom サービス呼び出しは、かなり単純な方法で慣用的な REST にマップされます。したがって、外部サービスと通信する場合、その IP にあるものは REST サービスである必要があります。同様に、外部サービスが Lagom と通信する場合は、REST を使用する必要があります。

于 2016-05-06T07:27:51.127 に答える