1. 引言
本文将带你探索一个有趣的 JHipster 实践案例——构建一个简单的微服务架构。我们将演示如何构建和部署所有必需组件,最终实现一个完整的微服务应用。
如果你是 JHipster 新手,建议先阅读我们的入门文章了解这个项目生成工具的基础知识。
2. 单体应用 vs 微服务
在之前的文章中,我们展示了如何创建和维护相对简单的单体应用。而我们的微服务系统则会将前端与后端分离,后端进一步拆分为多个小型应用,每个应用处理完整应用领域的子集。
✅ 微服务架构的优势:
- 解决了单体应用的扩展性问题
- 支持技术栈多样化
- 提高系统弹性
⚠️ 引入的复杂性:
- 组件注册管理
- 跨服务安全控制
- 分布式事务处理
JHipster 借助 Netflix 的 Eureka Server 和 Hashicorp 的 Consul 等现代开源工具,能处理大部分微服务管理难题。
选择架构时需考虑:
- 领域复杂度
- 应用关键性
- 可用性要求
- 部署环境分布情况
2.1. JHipster 微服务组件
使用 JHipster 构建微服务架构时,至少需要创建三个项目:JHipster Registry、微服务网关和至少一个微服务应用。
JHipster Registry
微服务架构的核心组件,负责连接所有其他组件并实现通信。
微服务应用
包含后端代码,运行时暴露特定领域的 API。一个微服务架构可包含多个微服务应用,每个应用包含相关实体和业务规则。
微服务网关
包含所有前端(Angular)代码,消费所有微服务应用提供的 API:
3. 安装
关于安装过程的详细信息,请参考我们的JHipster 入门文章。
4. 创建微服务项目
现在开始安装微服务项目的三个核心组件。
4.1. 安装 JHipster Registry
JHipster Registry 是标准 JHipster 应用,只需下载运行即可,无需修改:
git clone https://github.com/jhipster/jhipster-registry
cd jhipster-registry && ./mvnw
这会从 GitHub 克隆 jhipster-registry 项目并启动应用。成功启动后,访问 http://localhost:8761/,使用用户名 admin 和密码 admin 登录:
4.2. 安装微服务应用
开始构建实际功能。本例创建一个管理汽车的微服务应用:
# 创建应用目录并进入
mkdir car-app && cd car-app
# 运行 JHipster 向导
yo jhipster
按照向导创建名为 carapp 的微服务应用,关键参数:
- 端口:8081
- 包名:com.car.app
- 认证方式:JWT
- 服务发现:JHipster Registry
添加 car 实体:
# 运行实体创建向导
yo jhipster:entity car
创建包含 make、model 和 price 字段的 car 实体。完成后检查生成的代码——注意没有前端代码(JavaScript/HTML/CSS),这些将在网关中生成。
启动应用前确保 jhipster-registry 正在运行,否则会报错:
./mvnw
成功启动后,注册中心日志会显示:
Registered instance CARAPP/carapp:746e7525dffa737747dcdcee55ab43f8
with status UP (replication=true)
4.3. 安装微服务网关
创建网关应用并生成前端代码:
# 创建网关目录
mkdir gateway-app && cd gateway-app
# 运行 JHipster 向导
yo jhipster
创建微服务网关应用,关键参数:
- 端口:8080
- 包名:com.gateway
- 认证:JWT
- 服务发现:JHipster Registry
创建实体时选择从现有微服务生成:
# 运行实体创建向导
yo jhipster:entity car
选择 Yes 从现有微服务生成,输入 car-app 的相对路径(如 ../car-app),然后选择 Yes, regenerate the entity。JHipster 会使用 Car.json 文件自动生成 UI 代码:
Found the .jhipster/Car.json configuration file, entity can be automatically generated!
启动网关应用:
./mvnw
访问 http://localhost:8080/,使用 admin/admin 登录。顶部菜单会出现 Car 选项,点击可进入汽车列表页:
4.4. 创建第二个微服务应用
扩展系统,创建管理汽车经销商的微服务应用:
mkdir dealer-app && cd dealer-app
yo jhipster
应用名设为 dealerapp,端口设为 8082(必须不同于其他服务)。其他参数可自由选择——这是独立微服务,可使用不同于 car-app 的数据库、缓存策略等。
添加 dealer 实体,包含 name 和 address 字段:
yo jhipster:entity dealer
在网关中生成前端代码:
cd ../gateway-app
yo jhipster:entity dealer
启动 dealer-app:
./mvnw
刷新网关页面 http://localhost:8080,会看到新增的 Dealer 菜单项。
最后检查注册中心 http://localhost:8761/,点击 Applications 菜单,确认所有三个组件已成功注册:
✅ 短短几分钟内,我们构建了一个包含网关应用(所有前端代码)和两个微服务的复杂架构!
5. 总结
使用 JHipster 启动微服务架构项目非常简单:只需创建所需的微服务应用和一个微服务网关即可。
进一步探索框架可访问JHipster 官网。
本文涉及的 car-app、dealer-app 和 gateway-app 代码可在GitHub获取。