微服务 Dropwizard 配置<十一> 服务调用

调用另一个服务

在微服务环境中,每个服务负责向其他协作者提供功能或服务。如果我们希望扩展“HelloWorld”微服务,我们将需要创建一个可以使用Drop向导的REST客户端功能调用的服务。就像我们为SpringBoot微服务所做的那样,我们将从随书附带的源代码中利用后端服务。交互看起来类似于:


如果您查看这本书的源代码,我们将看到一个名为Backend的Maven模块,它包含一个非常简单的HTTPservlet,可以通过GET请求和查询参数调用它。此后端的代码非常简单,并且不使用任何框架(SpringBoot、Swarm或 WildFlySwarm)。

要在端口8080上启动后端服务,在目录并运行以下命令:

该服务在/api/backend 开放,并接受一个查询参数。例如,当我们使用以下路径/API/backend?greeting=Hello时,后端服务将使用如下所示的JSON对象进行响应:

$ curl -X GET http://localhost:8080/api/backend?greeting=Hello

在我们开始之前,让我们添加下 dropwizard-client 依赖项到我们的 por.xml 中:

<dependency>

    <groupId>io.dropwizard</groupId>

    <artifactId>dropwizard-client</artifactId>

</dependency>

我们将在  hola-dropwizard 示例中创建一个新的HTTP端点/api/greeting,并使用 Jersey 调用此后端!首先,让我们在名为GreeterRestResources和GreeterSayingFactory的hola-dropwizard项目的src/main/java/com/redhat/examples/dropwizard/resources 文件夹中创建两个新类。GreeterRestResources将实现我们的JAX-RS REST端点,GreeterSayingFactory类将封装我们希望用于Greter服务的配置选项

Example 3-15 中是 GreeterRestResource 类的代码实现

src/main/java/com/redhat/examples/dropwizard/resources/GreeterRestResource.java

GreeterSayingFactory类封装了我们需要的配置选项,比如服务主机和服务端口,它们可以在不同的环境中更改(请参见示例3-16)。它还声明了一个JerseyClientConfiguration,它为构建我们的泽西客户端提供了一个很好的DSL。让我们将其作为一个部分添加到HolaDropwizardConfiguration类中,如示例3-17所示。

我们还可以更新 conf/application.ym l文件,添加以下配置:

greeter:
      saying:${GREETER_SAYING:-Guten Tag Dropwizard}
      host:${GREETER_BACKEND_HOST:-localhost}
      port:${GREETER_BACKEND_PORT:-8080}

注意如果OS环境变量没有提供各种配置选项,我们将为它们指定默认值。

现在,让我们连接客户端和HolaDropwizardApplication类中的 greeter 资源,在这个类中,我们所有的服务和资源都连接到环境对象(示例3-18)。

最后,让我们实现客户端,它将调用后端服务,并注入所有适当的主机和端口信息,请参见示例3-19。x

Dropwizard 为进行REST调用提供了两个方便包装:HttpComponents库直接(如果您需要低级别的HTTP访问)或Jersey/JAX-RS REST客户端库,它们具有用于进行HTTP调用的高级DSL。在前面的示例中,我们使用 Jersey 客户端进行调用。

现在,让我们构建微服务,并验证我们可以调用这个新的问候语端点,以及它是否正确地调用后端。首先,如果后端还没有运行,我们就启动它。导航到此应用程序附带的源代码的后端目录并运行它:

$ mvn clean install jetty:run

接下来,让我们构建并运行 Dropwizard 微服务。让我们也将此服务配置为在与其默认端口(8080)不同的端口上运行,这样它就不会与已经在8080端口上运行的后端服务发生冲突。在后面的书中,我们可以看到如何在它们自己的容器中运行这些微服务,从而消除了在运行时对端口切换的限制。

首先,让我们明确说明要使用哪个端口作为默认端口。打开conf/application.yml文件并添加服务器端口信息:

server:
      applicationConnectors:
        - type: http
          port: 8080

现在通过覆盖默认端口启动微服务:

$ mvn clean install exec:java \ -Ddw.server.applicationConnectors[0].port=9090

现在,让我们导航浏览器到http:/localhost:9090/api/问候语,看看我们的微服务是否正确地调用后端并显示我们所期望的内容:

进一步学习:

在本章中,我们了解了 Dropwizard,看到了与SpringBoot的一些不同和相似之处,以及如何公开REST端点、配置和度量,以及如何调用外部服务器。这是作为Drop向导的快速介绍,决不是一个全面的指南。有关更多信息,请参见下列链接:

  • Dropwizard Core

  • Dropwizard Getting Started

  • Client API

  • Dropwizard on GitHub

  • Dropwizard examples on GitHub

下一节更加精彩!!!敬请期待

原文:

作者源码:https://github.com/redhat-developer/microservices-by-example-source

有什么讨论的内容,可以加我微信公众号:

猜你喜欢

转载自my.oschina.net/u/2277632/blog/1808921