Lagom服务如何使用其他服务



我想不出有三种情况。

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

1.Lagom服务在同一集群中消耗另一个Lagom服务

对于这种情况,方法是ServiceAImpl依赖于ServiceB API,该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,两个客户端必须在同一个集群中。然而Lagom说

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

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

  • "相同的服务";是指其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支持自我注册模式?

当Lagom谈到"集群"时,它指的是Akka集群。每个服务都可以部署为一个Akka集群,也就是说,一个服务可以是一个节点集群。因此,集群中没有多个服务,只有一个集群服务。

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

相关内容

  • 没有找到相关文章

最新更新