在微服务环境中,每一个服务负责将功能或服务提供给其余协做者。正如咱们在第一章中所讨论的,构建分布式系统是困难的,咱们不能抽象出网络或潜在的故障。咱们将在第5章中介绍如何构建与依赖关系的弹性交互。可是,在本节中,咱们将只关注于让服务与依赖服务进行对话。java
若是咱们但愿扩展hello-world微服务,咱们将须要建立一个可使用Spring的REST客户端函数调用的服务。对于这个示例和其余示例,咱们将使用后端服务并修改咱们的服务以扩展到后端以生成咱们但愿可以使用的问候语。git
若是您查看本书的源代码,咱们将看到一个名为backend的Maven模块,它包含一个很是简单的HTTPservlet,可使用GET请求和查询参数调用它。这个后端的代码很是简单,不使用任何微服务框架(SpringBoot、DropWizard或WildFlySwarn)。咱们建立了一个封装时间,IP和问候字段的ResponseDTO对象。咱们还利用JSON数据绑定的Jackson 库,以下所示:github
要在端口8080上启动后端服务,请导航到后端目录并运行如下命令spring
$ mvn clean install jetty:run后端
后端项目使用maven jetty插件,它容许咱们使用mvn jetty:run 快速启动咱们的应用程序。api
此服务在/api/backend,并接受一个查询参数问候语。例如,当咱们使用此路径/api/backend?greing=Hello调用此服务时,后端服务将使用以下JSON对象进行响应(也可使用浏览器访问此URL):浏览器
$ curl -X GET http://localhost:8080/api/backend?greeting=Hello网络
咱们会获得以下的:app
咱们将在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,查看咱们的微服务是否正确地调用后端并显示咱们所指望的内容:
在本章中,咱们了解了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