SmartOrder:现代微服务参考平台
Source: Dev.to
请提供您希望翻译的正文内容,我会按照要求将其翻译成简体中文并保留原有的格式、Markdown 语法以及技术术语。谢谢!
介绍
快速、动手体验 SmartOrder 参考平台:了解其结构设计原因、基于 Docker 的开发者体验是如何构建的,以及您可以在哪里加入并贡献代码。
Repository:
概览
SmartOrder 不是玩具。它是一个功能完整的微服务参考平台,作为生产级系统的蓝图,包括:
- 服务发现
- API 网关
- 消息
- 可观测性
- 本地开发工具
- 可复现的环境
所有组件已连接在一起,您可以通过 单个命令 启动整个堆栈。如果您设计、构建或运营分布式系统,此仓库为您提供一个真实的端到端示例,可供阅读、扩展和复用。
核心组件
| Component | Description | Links |
|---|---|---|
| API Gateway | Spring Cloud Gateway 充当单一入口点,通过 Consul 动态路由,并提供横切策略(CORS、断路器回退等)。 | |
| Service‑mesh‑ish primitives | Consul 用于服务发现和配置(自动注册、健康检查)。 | |
| Business microservices | 多个独立的 Spring Boot 服务(Order、Inventory、Product 等)提供支持 HATEOAS 的 REST API,并使用 Micrometer 进行监控。 | |
| Asynchronous communication | RabbitMQ 提供事件驱动的消息传递(支持 CQRS、最终一致性模式)。有意省略 Kafka,以保持本地开发的简易性。 | |
| Persistence | 在适当的情况下,每个服务使用 MongoDB 进行无模式持久化。 | |
| Observability & dashboards | 完整的 Docker 化堆栈(Prometheus、Grafana、InfluxDB、Dozzle、Dashy),并预置仪表盘。 |
此组合被设计为 蓝图——一种有主见、可重复的组件组合,您可以将其复制到实际项目中并进行演进。
Repository Layout
smartorder/
├─ docker/
│ ├─ config-services/
│ │ ├─ dashy/
│ │ ├─ grafana/
│ │ ├─ influxdb/
│ │ ├─ jmeter/
│ │ └─ prometheus/
│ ├─ docker-compose.all.yml
│ ├─ docker-compose.monitoring.yml
│ └─ docker-compose.persistence.yml
├─ docs/
│ ├─ openapi/
│ └─ asyncapi/
├─ services/
│ ├─ order/
│ ├─ inventory/
│ └─ product/
├─ gateway/
└─ pom.xml (multi‑module Maven parent)
为什么使用单一多模块 Maven 项目?
| 优势 | 说明 |
|---|---|
| 单一版本快照 | 所有组件一起启动;Docker Compose 编排与代码库中的提交保持一致。这使得本地可复现性和教程式入门变得非常简单。 |
| 同步的依赖管理 | 父 POM 和共享的 dependencyManagement / pluginManagement 减少了各服务之间的版本漂移,并简化了 CI。 |
| 统一的本地开发环境 | docker/ 文件夹和 docker-compose.all.yml 编排完整的生态系统,您可以使用正确版本的监控、消息和持久化组件一次性运行整个堆栈。 |
| 蓝图清晰 | 将服务归类在一起,使得展示架构图、端到端流程和示例场景时无需在大量独立仓库之间切换。 |
(如果您在大规模生产环境中更倾向于使用多仓库(poly‑repo)微服务架构,仍然可以基于此蓝图后期将服务拆分。该仓库的组织方式有意为这种抽取提供了便利。)
Docker 设置
Docker 设置是 核心——它不是事后才考虑的。仓库提供了结构化的 docker/ 布局和多个 compose 文件,您可以选择性地只启动所需的部分,或一次性启动全部。
常用 Compose 文件
docker-compose.all.yml– 编排整个生态系统(网关、服务、RabbitMQ、Consul、MongoDB、可观测性工具)。docker-compose.monitoring.yml– 仅启动监控栈(Prometheus、Grafana、InfluxDB、Dozzle、Dashy)。docker-compose.persistence.yml– 启动持久化服务(MongoDB、RabbitMQ、Consul)。
运行完整堆栈
# From the repository root
docker-compose -f docker/docker-compose.all.yml up --build
(确切的命令和 compose 文件名位于 docker/ 文件夹中。)
设计理念
领域驱动设计 (DDD)
- 服务拥有 有界上下文 并封装业务职责(订单、库存、产品)。
- 模型边界和数据所有权是显式的,使代码库易于理解。
REST + HATEOAS
- API 以 HATEOAS 友好的响应方式暴露,客户端可以发现资源和转换(链接),而不是仅依赖带外文档。
OpenAPI / AsyncAPI
- 同步的 REST API 使用 OpenAPI 进行文档化。
- 异步通道使用 AsyncAPI(在适用时)进行描述。
- 构件存放在
docs/文件夹以及每个服务模块中,支持自动生成客户端和消息契约验证。
质量与 CI
- 单元测试 和 集成测试 验证服务逻辑和交互。
- 包含
sonar-project.properties;项目已准备好使用 SonarCloud/SonarQube 进行分析。 - 覆盖率和 CI 徽章显示在 README 中,提供一目了然的健康视图。
- 该仓库是实验突变测试、契约测试(针对消息)以及端到端测试策略的好地方。
示例流程 – 小请求(订单 → 库存)
- 客户端 → POST
/api/orders(网关) - 网关 将请求路由到 订单服务(通过 Consul 注册的路由)
- 订单服务 将订单持久化到其有界上下文数据库(Mongo)
- 订单服务 向 RabbitMQ 发布
OrderCreated事件 - 库存服务 消费
OrderCreated,预留库存,并可能发布StockReserved或StockFailed - 客户端 按照 HATEOAS 链接查询订单状态或后续步骤
这种事件驱动的编排在各服务中实现,并通过 Docker 化的消息中间件进行连接,因此您可以使用单个 docker-compose 命令 在本地运行完整流程。
入门指南
-
克隆仓库
git clone https://github.com/your-org/smartorder.git cd smartorder -
启动完整堆栈
docker-compose -f docker/docker-compose.all.yml up --build -
探索服务
- API Gateway:
- Prometheus:
- Grafana: (admin / admin)
- Dashy:
-
运行测试
./mvnw verify -
阅读文档
- OpenAPI 规范:
docs/openapi/ - AsyncAPI 规范:
docs/asyncapi/
- OpenAPI 规范:
贡献
- Fork 代码库,创建特性分支,并提交 Pull Request。
- 遵循现有代码风格,并在推送前运行
./mvnw verify。 - 在添加新接口或事件时,更新文档(README、OpenAPI/AsyncAPI)。
许可证
在 Apache License 2.0 下分发。有关更多信息,请参阅 LICENSE。
概览
Architects – 阅读组合选择(通过 Consul 的服务发现、为何在演示蓝图中使用 RabbitMQ、以可观测性为先的技术栈),以获取下次架构评审的思路或比较权衡。
Developers – 该仓库包含可实际操作的示例(Spring Boot 应用、HATEOAS 模式、Micrometer 监控、Docker‑Compose 编排),您可以克隆并运行,以实践学习。
Contributors – 测试、文档和监控仪表盘均设计为可扩展。您可以贡献的帮助需求包括:
- 示例 OpenAPI/AsyncAPI 文件
- 额外的集成测试(消息的契约测试)
- 示例 CI 工作流
- 与语言无关的客户端示例
仓库布局
| Path | 描述 | 链接 |
|---|---|---|
README.md | 快速的架构概览和目标。 | [GitHub] |
docker/ | 所有的 compose 文件和监控堆栈(可复现的开发环境)。 | [GitHub + Docker] |
services/ | 各个 Spring Boot 应用程序(订单、库存、产品,…)。 | [GitHub + services] |
(将占位符链接替换为仓库的实际 URL。)
您可以如何帮助(建议的首个 PR)
- 添加/扩展 AsyncAPI 文档,以便为消息合约生成代码,供消费者/生产者使用。
- 为事件消息添加 合约测试(例如 Pact 或自定义消费者驱动的合约)。
- 使用矩阵化测试和覆盖率报告加强 CI 工作流。
- 改进将单个服务提取到独立仓库的示例(迁移指南)。
- 为一个服务添加从 OpenAPI 生成的示例客户端 SDK。
最后说明与后续
本文是一个简短系列的第一篇,将更详细地浏览仓库:
- Docker 组合 与可观测性仪表盘
- DDD 与消息契约
- 测试策略 与贡献者指南
尽快上线。
祝您探索蓝图愉快——欢迎贡献!