微服务 spring boot 译<七> Calling Another Service

Calling Another Service

在微服务环境中,每个服务负责将功能或服务提供给其他协作者。正如我们在第一章中所讨论的,构建分布式系统是困难的,我们不能抽象出网络或潜在的故障。我们将在第5章中介绍如何构建与依赖关系的弹性交互。但是,在本节中,我们将只关注于让服务与依赖服务进行对话。

如果我们希望扩展hello-world微服务,我们将需要创建一个可以使用Spring的REST客户端函数调用的服务。对于这个示例和其他示例,我们将使用后端服务并修改我们的服务以扩展到后端以生成我们希望能够使用的问候语。

 

如果您查看本书的源代码,我们将看到一个名为backend的Maven模块,它包含一个非常简单的HTTPservlet,可以使用GET请求和查询参数调用它。这个后端的代码非常简单,不使用任何微服务框架(SpringBoot、DropWizard或WildFlySwarn)。我们创建了一个封装时间,IP和问候字段的ResponseDTO对象。我们还利用JSON数据绑定的Jackson 库,如下所示:

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

$ mvn clean install jetty:run

后端项目使用maven jetty插件,它允许我们使用mvn jetty:run 快速启动我们的应用程序。

此服务在/api/backend,并接受一个查询参数问候语。例如,当我们使用此路径/api/backend?greing=Hello调用此服务时,后端服务将使用如下JSON对象进行响应(也可以使用浏览器访问此URL):

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

我们会得到如下的:

我们将在SpringBoothola-Spring启动示例中创建一个新的HTTP端点/api/greay,并使用Spring来调用这个后端!

在src/main/java/com/示例中创建一个名为GreeterRestController的新类,并将其填入类似于我们为HolaRestController填充的类(见示例2-4)。

Example 2-4. src/main/java/com/example/GreeterRestController.java

 

我已经省略了这个类中属性的getter/setter,但是一定要在源代码中包含它们!注意,我们在这里再次使用@ConfigreProperties注释为REST控制器配置一个配置块,尽管这一次我们使用的是问候语前缀。我们还创建了一个GET端点,就像我们对hola服务所做的那样,它现在返回的是一个字符串,其中包含后端服务主机和端口的值(这些值是通过@ConfigreProperties注释注入的)。让我们将backendServicehost和backendServicePort添加到我们的application.properties文件中:

接下来,我们将使用Spring的RestTemplate来调用远程服务。RestTemplate遵循具有模板模式的long-lived Spring约定,在这个方便的包装抽象中封装了常见的HTTP/REST习惯用法,然后处理所有连接和编组/解组调用的结果。RestTemplate使用本机JDK进行HTTP/网络访问,但您可以将其替换为ApacheHttpComponents、OkHttp、Netty或其他。

下面是使用RestTemplate时源代码的样子(同样,getter/setters省略了,但是是必需的)。我们正在与后端服务通信,方法是根据已经注入的主机和端口构造一个URL,并添加一个名为greing的GET查询参数。我们发送给欢迎参数后端服务的值来自GreeterRestController对象的Say字段,当我们添加@ConfigurationProperties注释时,该字段作为配置的一部分被注入(示例2-5)。

让我们添加BackendDTO类,该类用于封装来自后端的响应(示例2-6)。

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

$ mvn clean install jetty:run

接下来,让我们构建并运行SpringBoot微服务。让我们还将此服务配置为在与其默认端口(8080)不同的端口上运行,以便它不会与已经在端口8080上运行的后端服务发生冲突。

$ mvn clean install spring-boot:run -Dserver.port=9090

在本书的后面,我们可以看到如何在这些微服务自己的Linux容器中运行它们,从而消除运行时端口swizzling的限制。现在,让我们将浏览器导航到http://localhost:9090/api/greay,查看我们的微服务是否正确地调用后端并显示我们所期望的内容:

Where to Look Next

在本章中,我们了解了SpringBoot是什么,它与传统的WAR/EAR部署有什么不同,以及一些简单的用例,包括公开HTTP/REST端点、外部配置、度量以及如何调用另一个服务。这只是皮毛,如果您有兴趣了解更多关于Spring Boot的内容,请阅读以下链接和书籍:

  • Spring Boot

  • Spring Boot Reference Guide

  • Spring Boot in Action

  • Spring Boot on GitHub

  • Spring Boot Samples on GitHub

原文:

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

猜你喜欢

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