现在我们已经部署了hello microservice,让我们从另一个微服务中使用它。我们将在本节中部署的代码在Github的openshift/hello-microservice- customer -openshift目录中。

要消费微服务,我们首先要找到它。OpenShift提供了一个服务发现机制。可以使用环境变量、DNS或Vert.x服务查找,我们在这里使用的就是Vert.x的服务发现。项目的 pom.xml被配置为导入Vert.x服务发现、Kubernetes服务导入器和服务器端服务发现。您不必显式的在提供端注册service,因为Fabric8 Maven插件会为我们注册这些service。我们的消费者将会检索这个OpenShift的service而不是pod。

@Override
public void start() {
    Router router = Router.router(vertx);
    router.get("/").handler(this::invokeHelloMicroservice);
    // Create the service discovery instance
    ServiceDiscovery.create(vertx, discovery -> {
        // Look for an HTTP endpoint named "hello-microservice"
        // you can also filter on 'label'
        Single<WebClient> single = HttpEndpoint.rxGetWebClient
            (discovery, rec -> rec.getName().equals
                ("hello-microservice"),
        new JsonObject().put("keepAlive", false));
    single.subscribe(
        client -> {
            // the configured client to call the microservice
            this.hello = client;
            vertx.createHttpServer()
                .requestHandler(router::accept)
                .listen(8080);
            },
        err -> System.out.println("Oh no, no service")
        );
    });
}

在这个start方法中,我们使用服务发现来检索hello microservice.然后如果这个服务器可用的话,我们启动HTTP服务端,并将保持一个对我们检索得到的WebClient的引用。我们还向WebClient传递一个配置,并禁用keepalive设置(我们将在几分钟内看到这个原因)。在invokeHelloMicroservice中,我们不需要将端口和主机传递给rxSend方法(就像我们之前做的那样)。实际上,WebClient已经被配置了目标服务的地址信息:

HttpRequest<JsonObject> request1 = hello.get("/Luke")
    .as(BodyCodec.jsonObject());
HttpRequest<JsonObject> request2 = hello.get("/Leia")
    .as(BodyCodec.jsonObject());
Single<JsonObject> s1 = request1.rxSend()
    .map(HttpResponse::body);
Single<JsonObject> s2 = request2.rxSend()
    .map(HttpResponse::body);
// ...

在终端上,导航到openshift/hello-microservice-consumer-openshift文件夹下,以下面这样的方式构建和部署服务:

mvn fabric8:deploy -Popenshift

在OpenShift仪表板,您应该会看到第二个服务和路路由)。如果您打开与hello-consumer microservice相关的路由,您应该看到:

{
"luke" : "hello Luke hello-microservice-1-sa5pf",
"leia" : "hello Leia hello-microservice-1-sa5pf"
}

你可能会看到一个503页面,因为这个pod还没有启动。刷新就行。到目前为止,没有什么新鲜的事。展示的 served-by值总是指向同一个pod(因为我们只有一个)。

results matching ""

    No results matching ""