# go-miscshop **Repository Path**: slzp/go-miscshop ## Basic Information - **Project Name**: go-miscshop - **Description**: No description available - **Primary Language**: Go - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-20 - **Last Updated**: 2026-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # go-miscshop 基于 **gRPC + Gin + Consul** 的微服务电商项目,支持 Docker Compose 一键部署,集成 OpenTelemetry + Jaeger 分布式调用链追踪。 ## 技术栈 | 组件 | 技术 | 版本 | |------|------|------| | 语言 | Go | 1.25.1 | | RPC 框架 | gRPC | v1.81.1 | | 序列化 | Protocol Buffers | v1.36.11 | | HTTP 框架 | Gin | v1.8.1 | | 服务发现 | Consul | 1.15 | | 配置管理 | Viper | v1.21.0 | | 链路追踪 | OpenTelemetry + Jaeger | latest | | 容器化 | Docker + Docker Compose | — | ## 微服务架构 ``` ┌─────────────────┐ │ Consul │ 服务注册/发现 └────────┬────────┘ │ ┌────────────────────┼────────────────────────┐ │ │ │ ┌────▼─────┐ ┌────▼─────┐ ┌──────▼──────┐ │ adservice│ │cartservice│ │currencyservice│ │ :50010 │ │ :50011 │ │ :50012 │ └──────────┘ └──────────┘ └─────────────┘ │ ┌──────────┐ ┌────▼─────┐ ┌──────────────┐ │emailserv. │ │checkout │ │paymentservice│ │ :50013 │ │ :50020 │ │ :50014 │ └──────────┘ └────┬─────┘ └──────────────┘ │ ┌──────────┐ ┌────▼─────┐ ┌──────────────┐ │productcat.│ │shipping │ │recommend. │ │ :50015 │ │ :50018 │ │ :50016 │ └──────────┘ └──────────┘ └──────────────┘ │ ┌──────▼──────┐ │ frontend │ HTTP :8052 │ (Gin) │ └─────────────┘ ``` ### 服务列表 | 服务 | 端口 | 说明 | |------|------|------| | adservice | 50010 | 广告服务 | | cartservice | 50011 | 购物车服务 | | currencyservice | 50012 | 货币服务 | | emailservice | 50013 | 邮件服务 | | paymentservice | 50014 | 支付服务 | | productcatalogservice | 50015 | 商品目录服务 | | recommendationservice | 50016 | 推荐服务 | | shippingservice | 50018 | 配送服务 | | checkoutservice | 50020 | 结算服务(编排服务) | | frontend | 8052 | 前端页面(HTTP) | ## 快速开始(Docker Compose,推荐) ```bash # 1. 克隆项目 git clone https://gitee.com/slzp/go-miscshop.git cd go-miscshop # 2. 一键启动(编译+运行) ./manage.sh build ./manage.sh start # 3. 访问 # 前端: http://localhost:8052 # Consul: http://localhost:8500 # Jaeger 链路追踪: http://localhost:16686 ``` ### manage.sh 命令 ```bash ./manage.sh build # 编译所有服务镜像 ./manage.sh start # 启动所有服务 ./manage.sh stop # 停止所有服务 ./manage.sh restart # 重启所有服务 ./manage.sh logs # 实时日志 ./manage.sh status # 查看运行状态 ./manage.sh clean # 全部清理 ``` ## 本地开发 ```bash # 1. 启动 Consul consul agent -dev # 2. 进入服务目录,修改 config/config.yaml 中的 address 为 127.0.0.1 # 3. 启动服务 cd adservice && go run main.go # 端口 50010 cd cartservice && go run main.go # 端口 50011 # ... 依次启动其他服务 # 4. 启动前端 cd frontend && go run . # 5. 访问 http://localhost:8052 ``` ## 配置说明 每个服务通过 `config/config.yaml` 配置,支持环境变量覆盖: ```yaml # config/config.yaml address: "127.0.0.1" # 监听地址,默认 127.0.0.1 port: 50010 # 监听端口 ``` 环境变量优先级更高: ```bash PORT=9090 ADDRESS=0.0.0.0 ./adservice # 环境变量覆盖配置 ``` Docker 部署时注入: ```yaml environment: - CONSUL_ADDR=consul:8500 # Consul 地址 - ADDRESS=adservice # 服务注册地址 - OTEL_EXPORTER_OTLP_ENDPOINT=jaeger:4317 # 链路追踪上报地址 ``` ## 项目结构 ``` go-miscshop/ adservice/ # 广告微服务 config/ # 配置文件 handler/ # gRPC 处理函数 proto/ # Protobuf 定义 + 生成代码 main.go # 入口 Dockerfile Makefile genpb.sh # 重新生成 pb 文件 cartservice/ # 购物车微服务 checkoutservice/ # 结算微服务(编排服务) common/ # 公共模块 consul.go # Consul 注册(含健康检查+重试) grpc.go # gRPC 服务/客户端启动(含 OTel 拦截器) tracing.go # OpenTelemetry 初始化 currencyservice/ # 货币微服务 emailservice/ # 邮件微服务 frontend/ # 前端(Gin HTTP Server) paymentservice/ # 支付微服务 productcatalogservice/ # 商品目录微服务 recommendationservice/ # 推荐微服务 shippingservice/ # 配送微服务 docker-compose.yml # Docker Compose 编排 manage.sh # 管理脚本(编译/启动/停止/重启) go.work # Go Workspace .gitignore ``` ## 链路追踪 项目已集成 OpenTelemetry + Jaeger,每个服务启动时自动初始化: - **Jaeger UI**: http://localhost:16686 - 选择 Service 名称(如 `frontend`),点击 Find Traces 即可查看调用链瀑布图 - 采样策略:默认 10% 采样(`common/tracing.go` 中可调整) ## 重新生成 Proto 文件 ```bash # 生成全部 ./genpb.sh # 或进入单个服务 cd adservice && ./genpb.sh ``` ## 页面展示 ![首页](img/home1.png) ![首页2](img/home2.png) ![商品详情](img/details1.png) ![购物车](img/cart_nil.png) ![支付](img/pay1.png) ![Consul 服务列表](img/consul.png) ## License MIT