SmartOrder:现代微服务参考平台

发布: (2026年2月13日 GMT+8 01:30)
10 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的正文内容,我会按照要求将其翻译成简体中文并保留原有的格式、Markdown 语法以及技术术语。谢谢!

介绍

快速、动手体验 SmartOrder 参考平台:了解其结构设计原因、基于 Docker 的开发者体验是如何构建的,以及您可以在哪里加入并贡献代码。

Repository:

概览

SmartOrder 不是玩具。它是一个功能完整的微服务参考平台,作为生产级系统的蓝图,包括:

  • 服务发现
  • API 网关
  • 消息
  • 可观测性
  • 本地开发工具
  • 可复现的环境

所有组件已连接在一起,您可以通过 单个命令 启动整个堆栈。如果您设计、构建或运营分布式系统,此仓库为您提供一个真实的端到端示例,可供阅读、扩展和复用。

核心组件

ComponentDescriptionLinks
API GatewaySpring Cloud Gateway 充当单一入口点,通过 Consul 动态路由,并提供横切策略(CORS、断路器回退等)。
Service‑mesh‑ish primitivesConsul 用于服务发现和配置(自动注册、健康检查)。
Business microservices多个独立的 Spring Boot 服务(Order、Inventory、Product 等)提供支持 HATEOAS 的 REST API,并使用 Micrometer 进行监控。
Asynchronous communicationRabbitMQ 提供事件驱动的消息传递(支持 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 中,提供一目了然的健康视图。
  • 该仓库是实验突变测试、契约测试(针对消息)以及端到端测试策略的好地方。

示例流程 – 小请求(订单 → 库存)

  1. 客户端 → POST /api/orders(网关)
  2. 网关 将请求路由到 订单服务(通过 Consul 注册的路由)
  3. 订单服务 将订单持久化到其有界上下文数据库(Mongo)
  4. 订单服务 向 RabbitMQ 发布 OrderCreated 事件
  5. 库存服务 消费 OrderCreated,预留库存,并可能发布 StockReservedStockFailed
  6. 客户端 按照 HATEOAS 链接查询订单状态或后续步骤

这种事件驱动的编排在各服务中实现,并通过 Docker 化的消息中间件进行连接,因此您可以使用单个 docker-compose 命令 在本地运行完整流程

入门指南

  1. 克隆仓库

    git clone https://github.com/your-org/smartorder.git
    cd smartorder
  2. 启动完整堆栈

    docker-compose -f docker/docker-compose.all.yml up --build
  3. 探索服务

    • API Gateway:
    • Prometheus:
    • Grafana: (admin / admin)
    • Dashy:
  4. 运行测试

    ./mvnw verify
  5. 阅读文档

    • OpenAPI 规范: docs/openapi/
    • AsyncAPI 规范: docs/asyncapi/

贡献

  • 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。

最后说明与后续

本文是一个简短系列的第一篇,将更详细地浏览仓库:

  1. Docker 组合 与可观测性仪表盘
  2. DDD 与消息契约
  3. 测试策略 与贡献者指南

尽快上线。

祝您探索蓝图愉快——欢迎贡献!

0 浏览
Back to Blog

相关文章

阅读更多 »

KAIzen — AI 时代对敏捷的需求

一家游戏公司的小团队如何将流效率从 32% 提升到 85%——通过改变我们提供给 AI 的内容。我们的团队严格遵循 Scrum:两周的 s...