2

我想不出三种情况。

  1. Lagom 服务使用同一集群中的另一个 Lagom 服务
  2. Lagom 服务使用不同集群中的另一个 Lagom 服务
  3. Lagom 服务使用外部非 Lagom 服务
  4. 外部非 Lagom 服务使用 Lagom 服务

1、Lagom服务消费同一个集群中的另一个Lagom服务

对于这种情况,方法是 ServiceAImpl 依赖于 ServiceB API,该 API 绑定到将被注入到 ServiceAImpl 的具体实现。

服务B绑定:

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

服务A实现:

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,两个客户端必须在同一个集群中。然而拉戈姆

集群应该只跨越运行相同服务的节点。

在这种情况下,我们有两种不同类型的服务。

  • “相同的服务”是指 API 暴露给外部服务的顶级服务?
  • 在 Lagom 1 微服务 = 1 个带有外部 API 的服务 + n 个内部服务?

2. Lagom 服务消费不同集群中的另一个 Lagom 服务

文档

请注意,如果您要与之通信的服务实际上是 Lagom 服务,您可能需要阅读与外部 Lagom 项目集成的文档。

为什么只配置了对服务 API 的依赖,而不是外部 Lagom 服务的 IP 和端口?

3. Lagom 服务消费外部非 Lagom 服务

您要做的第一件事是在服务定位器中注册每个外部服务。假设我们要注册一个名为 weather 的外部服务,该服务在 http://localhost:3333 上运行,这是我们将添加到构建中的内容:

 lagomUnmanagedServices in ThisBuild := Map("weather" -> "http://localhost:3333")

与该 IP 的合同是什么?背后应该是什么?

4. 外部非 Lagom 服务使用 Lagom 服务

在 Lagom 支持自我注册模式之前,我必须使用第三方注册模式吗?

4

1 回答 1

2

当 Lagom 谈到“集群”时,它指的是 Akka 集群。每个服务都可以部署为一个 Akka 集群,即一个服务可以是一个节点集群。所以你在一个集群中没有多个服务,你只有一个集群服务。

Lagom 服务调用以一种相当直接的方式映射到惯用的 REST。因此,在与外部服务通信时,该 IP 上的东西应该是 REST 服务。同样,当外部服务与 Lagom 通信时,它应该使用 REST。

于 2016-05-06T07:27:51.127 回答