返回介绍

1.5 使用 Spring Boot 来构建微服务

发布于 2025-04-22 21:54:04 字数 4749 浏览 0 评论 0 收藏

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

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

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

图 1-3 Spring Boot 抽象出了常见的 REST 微服务任务(路由到业务逻辑、从 URL 中解析 HTTP 参数、JSON 与对象相互映射),并让开发人员专注于服务的业务逻辑

这个例子并不详尽,甚至没有说明应该如何构建一个生产级别的微服务,但它同样值得我们注意,因为它只需要写很少的代码。在第 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 微服务

package com.thoughtmechanix.simpleservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; 
import org.springframework.web.bind.annotation.PathVariable;

@SpringBootApplication  ⇽--- 告诉 Spring Boot 框架,该类是 Spring Boot 服务的入口点
@RestController  ⇽--- 告诉 Spring Boot,要将该类中的代码公开为 Spring RestController 类
@RequestMapping(value="hello")  ⇽--- 此应用程序中公开的所有 URL 将以/ hello 前缀开头
public class Application {

    public static void main(String[] args) { 
        SpringApplication.run(Application.class, args);
    }

    @RequestMapping(value="/{firstName}/{lastName}",  ⇽---  Spring Boo 公开为一个基于 GET 方法的 REST 端点,它将使用两个参数,即 firstName 和 lastName
    →  method = RequestMethod.GET)
    public String hello( @PathVariable("firstName") String firstName,   ⇽--- 将 URL 中传入的 firstName 和 lastName 参数映射为传递给 hello 方法的两个变量
    →  @PathVariable("lastName") String lastName) { 
        return String.format("{\"message\":\"Hello %s %s\"}",  ⇽--- 返回一个手动构建的简单 JSON 字符串。在第 2 章中,我们不需要创建任何 JSON
        →  firstName, lastName);
        }
    }

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

{"message":"Hello john carnell"}

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

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 Spring Boot 服务将通过控制台与公开的端点和服务端口进行通信

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

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

图 1-5 /hello 端点的响应,以 JSON 净荷的形式展示了请求的数据

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

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

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。