|
|
51CTO旗下网站
|
|
移动端

1.5 使用Spring Boot来构建微服务

《Spring微服务实战》第1章欢迎迈入云世界,Spring,本书主要介绍微服务架构,以及为什么应该考虑采用微服务架构来构建应用。本节为大家介绍使用Spring Boot来构建微服务。

作者:陈文辉 译来源:人民邮电出版社|2018-05-23 14:02

1.5 使用Spring Boot来构建微服务

我一直以来都持有这样一个观点:如果一个软件开发框架通过了被我亲切地称为“卡内尔猴子测试”[2]的试验,我就认为它是经过深思熟虑和易于使用的。如果一只像我(作者)这样的“猴子”能够在10 min或者更少时间内弄明白一个框架,那么这个框架就通过了这个试验。这就是我第一次写Spring Boot服务示例的感觉。我希望读者也有同样的体验和快乐,所以,让我们花一点儿时间,看看如何使用Spring编写一个简单的“Hello World”REST服务。

在本节中,我们不会详细介绍大部分代码。这个例子的目标是让读者体会一下编写Spring Boot服务的感受。第2章中会深入更多的细节。

图1-3展示了这个服务将会做什么,以及Spring Boot微服务将会如何处理用户请求的一般流程。

这个例子并不详尽,甚至没有说明应该如何构建一个生产级别的微服务,但它同样值得我们注意,因为它只需要写很少的代码。在第2章之前,我不打算介绍如何设置项目构建文件或代码的细节。如果读者想要查看Maven pom.xml文件以及实际代码,可以在第1章对应的代码中找到它。第1章中的所有源代码都能在本书的GitHub存储库找到。

注意

在尝试运行本书各章的代码示例之前,一定要先阅读附录A。附录A涵盖本书中所有项目的一般项目布局、运行构建脚本的方法以及启动Docker环境的方法。本章中的代码示例很简单,旨在从桌面直接运行,而不需要其他章的信息。但在后面的几章中,将很快开始使用Docker来运行本书中使用的所有服务和基础设施。如果读者还没有阅读附录A中与设置桌面环境相关的内容,请不要过多自行尝试,避免浪费时间和精力。

在这个例子中,创建一个名为Application的Java类(在simpleservice/src/com/thoughtmechanix/application/simpleservice/Application.java的Java类,它公开了一个名为/hello的REST端点。Application类的代码,如代码清单1-1所示。

代码清单1-1 使用Spring Boot的Hello World:一个简单的Spring微服务

  1. package com.thoughtmechanix.simpleservice;  
  2. import org.springframework.boot.SpringApplication;  
  3. import org.springframework.boot.autoconfigure.SpringBootApplication;   
  4. import org.springframework.web.bind.annotation.RequestMapping;   
  5. import org.springframework.web.bind.annotation.RequestMethod;  
  6. import org.springframework.web.bind.annotation.RestController;   
  7. import org.springframework.web.bind.annotation.PathVariable;  
  8. @SpringBootApplication⇽--- 告诉Spring Boot框架,该类是Spring Boot服务的入口点  
  9. @RestController⇽--- 告诉Spring Boot,要将该类中的代码公开为Spring RestController类  
  10. @RequestMapping(value="hello")⇽--- 此应用程序中公开的所有URL将以/ hello前缀开头  
  11. public class Application {  
  12.     public static void main(String[] args) {   
  13.         SpringApplication.run(Application.class, args);  
  14.     }  
  15.     @RequestMapping(value="/{firstName}/{lastName}",⇽---  Spring Boo公开为一个基于GET方法的REST端点,它将使用两个参数,即firstName和lastName  
  16.     ➥  method = RequestMethod.GET)  
  17.     public String hello( @PathVariable("firstName") String firstName, ⇽--- 将URL中传入的firstName和lastName参数映射为传递给hello方法的两个变量  
  18.     ➥  @PathVariable("lastName") String lastName) {   
  19.         return String.format("{\"message\":\"Hello %s %s\"}",⇽--- 返回一个手动构建的简单JSON字符串。在第2章中,我们不需要创建任何JSON  
  20.         ➥  firstName, lastName);  
  21.         }  
  22.     } 

代码清单1-1中主要公开了一个GET HTTP端点,该端点将在URL上取两个参数(firstName和lastName),然后返回一个包含消息“Hello firstName lastName”的净荷的简单JSON字符串。如果在服务上调用了端点/hello/john/carnell,返回的结果(马上展示)将会是:

  1. {"message":"Hello john carnell"} 

让我们启动服务。为此,请转到命令提示符并输入以下命令:

  1. mvn spring-boot:run 

这条mvn命令将使用Spring Boot插件,然后使用嵌入式Tomcat服务器启动应用程序。

Java与Groovy以及Maven与Gradle!

Spring Boot框架对Java和Groovy编程语言提供了强力的支持。可以使用Groovy构建微服务,而无需任何项目设置。Spring Boot还支持Maven和Gradle构建工具。我将本书中的例子限制在Java和Maven中。作为一个长期的Groovy和Gradle的爱好者,我对语言和构建工具有良好的尊重,但为了保持本书的可管理性,并使内容更聚焦,我选择使用Java和Maven,以便于照顾到尽可能多的读者。

如果一切正常开始,在命令行窗口中应该看到图1-4所示的内容。

检查图1-4中的内容,注意两件事。首先,端口8080上启动了一个Tomcat服务器;其次,在服务器上公开了/hello/{firstName}/{lastName}的GET端点。

这里将使用名为POSTMAN的基于浏览器的REST工具来调用服务。许多工具(包括图形和命令行)都可用于调用基于REST的服务,但是本书中的所有示例都使用POSTMAN。图1-5展示了POSTMAN调用http://localhost:8080/ hello/john/carnell端点并从服务中返回结果。

显然,这个简单的例子并不能演示Spring Boot的全部功能。但是,我们应该注意到,在这里只使用了25行代码就编写了一个完整的HTTP JSON REST服务,其中带有基于URL和参数的路由映射。正如所有经验丰富的Java开发人员都会告诉你的那样,在25行Java代码中编写任何有意义的东西都是非常困难的。虽然Java是一门强大的编程语言,但与其他编程语言相比,它却获得了啰嗦冗长的名声。

完成了Spring Boot的简短介绍,现在必须提出这个问题:我们可以使用微服务的方式编写应用程序,这是否意味着我们就应该这么做呢?在下一节中,将介绍为什么以及何时适合使用微服务方法来构建应用程序。

[2] “卡内尔猴子测试”对应的英文为“Carnell Monkey Test”,是作者John Carnell设想出来的一个判断框架是否易于使用的试验。——译者注


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

非常网管——网络应用

在网络应用越来越复杂的今天,传统的网络应用已经不能满足企业和用户的需要,这就对网络管理员、信息管理部门提出了更高的要求。本书介绍了...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊