今天发现了一个本地管理 Spring Boot 应用的解决方案——Trampoline。它是一个简单的产品,提供 Web 控制台来启动、停止和监控你的应用。对于在本地进行微服务开发时,本地会运行很多不同的应用,这种情况下它还是很有用的。本文我将介绍 Trampoline 提供的主要功能。
Trampoline 本身也是一个 Spring Boot 应用,因此启动非常简单,可以在 IDE 中启动,或是在 mvn clean install 编译后使用 java -jar 命令进行启动。默认情况下 Web 控制台将绑定在8080端口,可以使用 server.port 参数来指定其它端口。Trampoline 具备的能力有:
启动应用:通过运行 Maven Spring Boot 插件命令 mvn spring-boot:run 来编译源代码和运行应用;
关闭应用:通过调用 Spring Boot Actuator /shutdown 接口来进行应用关闭操作;
监控应用:从 Spring Boot Actuator 接口来获取监控数据并进行展现,例如日志、度量统计和 Git 提交信息。
首先,我们需要从 GitHub 将 Trampoline 代码克隆到本地工作目录。GitHub 仓库地址在此:https://github.com/ErnestOrt/Trampoline.git 。应用在 trampoline 目录中,可以使用 Maven 命令 man spring-boot:run 来运行应用的主程序,在运行后,控制台可以通过 http://localhost:8080 进行访问。
这里我们将使用一个示例微服务项目,该项目使用 Spring Boot 2.0 构建,该示例项目 GitHub 仓库地址为:https://github.com/piomin/sample-spring-microservices-new.git 。在我们开始使用 Trampoline 进行管理前,我们需要对这个项目进行一些修改。首先,所有需要被管理的微服务项目都需要暴露 Spring Boot Actuator 接口出来,确保 /shutdown 接口是被开启的,以下是具体 Spring Boot YAML 配置示例:
management: endpoint.shutdown.enabled: true endpoints.web.exposure.include: '*'
如果想包含代码提交信息的话,需要启用 git-commit-id-plugin Maven 插件,这个插件在应用编译构建时将执行。当然,也需要添加 spring-boot-maven-plugin 插件,这个插件的作用时通过 Maven 来编译构建和运行 Spring Boot 应用。所有相关所需修改都在 trampoline 分支上:https://github.com/piomin/sample-spring-microservices-new/tree/trampoline 。
接下来我们将使用 Trampoline Web 控制台进行配置,首先,在 SETTINGS 区域,需要注册每个微服务的实例,可以注册的方式有:
外部-已经在运行的应用:提供 IP 地址和 HTTP 端口;
微服务应用的 Git 仓库:提供 Git URL 克隆到本地;
微服务应用的 Git 仓库:已克隆至本地的,提供目录地址。
由于我已经将微服务应用源代码克隆到本地工作目录,因此我将选用以上方式的第三种。在注册微服务表单中,必须要填写微服务名称、端口、actuator 接口路径,以及默认构建工具和 Maven pom.xml 文件路径。
要注意的是在设置页面的 Maven 设置区域,配置 Maven 安装目录。在注册完毕所有示例微服务后(config-service、 discovery-service、 gateway-service 和三个 Spring Cloud 应用)我们将它们添加到一个组里面。这个是十分有用的特性,这样我们可以一键部署这些微服务。
下面是我们在 Trampoline 里注册服务列表:
现在,我们访问下 INSTANCES 页面,我们可以启动一个微服务实例或是一个组的微服务。如果你想启动一个微服务实例,就从列表页面选择它然后点击启动,将立马开启一个新的命令窗口,从源代码编译构建应用并在指定端口进行启动。
下面是运行中的微服务列表。可以看到应用的 HTTP 端口和运行状态。可以通过点击日志、统计或追踪按钮查看详细信息。
下面是关于 discovery-service 的最后一次提交信息。
如果你决定重启一个应用,Trampoline 将向 /shutdown 接口发送请求,然后重新从最新的源代码编译构建微服务应用并运行。另外,你可以使用 Spring Boot Devtool,强制在代码变更后会进行重启操作。由于 Trampoline 会通过 actuator 接口持续监控所有注册的应用,因此还是可以看到所有运行中微服务的状态。