机器翻译正文由机器翻译自项目原始文档(英文),排版经程序统一处理,可能存在偏差,请以原项目仓库为准。
电子商务微服务
此仓库托管了一个示例电子商务平台,展示了使用多个Go服务以及一个基于Python的推荐服务的微服务架构。该项目展示了:
- 服务之间的gRPC通信
- 基于Kafka的事件流处理管道
- 为客户端提供统一的GraphQL API网关
- 用于产品搜索的Elasticsearch集成
🧭 概览
该系统由多个微服务组成:
- 账户(Go):管理用户账户、认证和授权。
- 产品(Go):产品的增删改查(CRUD);在Elasticsearch中索引产品数据。
- 订单(Go):处理订单创建和持久化;向Kafka发布事件。
- 支付(Go):处理支付操作并向订单微服务发送更新。
- 推荐系统(Python):消费Kafka事件并生成产品推荐。
- API网关(Go):提供统一的GraphQL API供前端客户端使用。
整个生态系统使用Docker Compose进行容器化。数据存储包括PostgreSQL、Elasticsearch和Kafka。
🏗 架构图
以下是系统架构的高级概述:
通信概述
-
API Gateway (GraphQL)talks to:Account client→Account server→PostgresProduct client→Product server→ElasticSearchKafkaOrder client→Order server→PostgresKafka
(还通过 gRPC 与产品服务通信)Payment client→Payment service→payment providerPostgresKafkaRecommender client→Recommender server(Python)→Postgres (Replica)Kafka
-
事件流:
Order和Product服务充当 Kafka 生产者。Payment服务是一个 Kafka 消费者,用于接收产品事件并将其保存到支付提供商(DodoPayments)中。Recommender服务也是一个 Kafka 消费者,负责获取订单/产品事件并更新内部推荐状态。
⚙ 服务
🧑💼 账户服务(Go)
- 职责:注册、登录、获取账户数据、生成JWT令牌。
- 数据库:PostgreSQL
📦 产品服务(Go)
- 职责:产品的增删改查操作,索引到Elasticsearch,向Kafka发布事件。
- 数据库:Elasticsearch
🛒 订单服务(Go)
- 职责:订单创建、价格计算、数据持久化、Kafka事件发布。
- 依赖:调用产品服务以获取产品信息。
🧠 推荐服务(Python)
- 职责:Kafka消费者,根据产品/订单事件构建推荐。
- 技术栈:Python gRPC PostgreSQL(产品数据库副本)
🚪 API网关(Go)
- 职责:在
/graphql提供统一的GraphQL端点。 - 实现:使用所有微服务的gRPC客户端和模式拼接。
🚀 入门
✅ 前提条件
在运行项目之前,确保你已安装以下内容:
📥 克隆仓库
git clone https://github.com/rasadov/EcommerceAPI.git
cd ecommercemicroservices
🐳 运行 Stack
要使用 Docker Compose 构建并启动所有服务,请运行:
# Step 1: Build the base image
docker compose build base
# Step 2: Build and start all services
docker compose up -d --build```
这将启动:
- 微服务(
account,order,product,payment,graphql) - 基于 Python 的
recommender服务 - 数据库:PostgreSQL,Elasticsearch
- Kafka Zookeeper
- GraphQL 网关
🌐 访问 API
一切运行正常后,打开你的浏览器访问:
-
GraphQL API 端点: http://localhost:8080/graphql
-
GraphQL Playground(交互式测试): http://localhost:8080/playground
📬 使用方法(GraphQL)
以下是您可以在 GraphQL Playground 中测试的示例 GraphQL 查询和变更。
📝 注册新账户
mutation {
register(account: {
name: "Alice"
email: "alice@example.com"
password: "secret123"
}) {
token
}
}
🔐 登录
mutation {
login(account: {
email: "alice@example.com"
password: "secret123"
}) {
token
}
}
➕ 创建产品
mutation {
createProduct(product: {
name: "Camera"
description: "A digital camera"
price: 99.99
}) {
id
name
}
}
🔍 查询产品
query {
product(pagination: { skip: 0, take: 10 }) {
id
name
price
}
}
🛒 创建订单
mutation {
createOrder(order: {
products: [
{ id: "PRODUCT_ID", quantity: 2 }
]
}) {
id
totalPrice
products {
name
quantity
}
}
}
🤝 贡献
我们欢迎贡献!要贡献:
分叉仓库
创建一个新分支
提交并推送你的更改
打开一个拉取请求
👤 作者
Rauf Asadov GitHub: @rasadov 领英: Rauf Asadov 邮箱: raufasadov23@gmail.com
🪪 许可证
本项目根据 Apache 许可证 2.0 授权。
本站来源与版权声明
- 本文标题:EcommerceAPI - 模块化电商后端
- 本文链接:https://www.cn121.com/shop/rasadov-ecommerceapi.html
- 原项目:rasadov/EcommerceAPI 版权归原作者 rasadov 及贡献者所有
- 收录信息:本站于 2026-10-08 收录本项目,本页所列协议与仓库指标均为收录当时的状态;该日期之后原项目的版本更新与协议变更,本页不作同步。
- 开源协议:收录时本项目采用 Apache-2.0(查看 LICENSE 原文),本站译文为其衍生内容;使用、修改、分发请以该仓库 LICENSE 原文为准。本站对原文仅作排版与图片地址适配, 并保留原项目的 NOTICE 与署名要求。
- 站点出处:本文首发于 OneTwoOne,收录自 GitHub 开源项目 rasadov/EcommerceAPI。
- 翻译说明:本页正文为人工智能生成内容——由机器翻译对原项目 README 初译、经程序校验排版,可能存在错漏,请以原项目文档为准。
- 引用声明:商业转载、第三方聚合或 AI 检索训练引用时,请务必保留以上来源出处、本文永久链接,以及原项目的版权声明与许可信息。
- 下架通道:若原项目此后变更或收紧了许可协议、或作者/权利人认为本站的收录方式(译文、排版适配、简介翻译等)超出其授权范围,请通过 xyd3302001@163.com 发送下架通知,并附上项目地址与本页链接。本站核实后将第一时间删除本页内容,或改为不复制原文的目录性收录;署名更正等其他要求可一并提出。