环境搭建
本章节将指导你搭建电商微服务系统的开发环境,包括项目初始化、依赖安装、Protocol Buffers 配置和服务发现环境。
📋 学习目标
完成本章节后,你将能够:
- 创建微服务项目目录结构
- 初始化各个服务的 Go 模块
- 安装项目依赖
- 配置 Protocol Buffers
- 启动 Consul 服务发现
- 运行项目并验证
🚀 快速开始
1. 创建项目目录
bash
# 创建项目根目录
cd examples/microservices
mkdir -p 06-ecommerce-microservices
cd 06-ecommerce-microservices
# 创建服务目录
mkdir -p user-service
mkdir -p order-service
mkdir -p product-service
mkdir -p gateway
mkdir -p proto/{user,order,product}
mkdir -p docs2. 初始化 Go 模块
bash
# 根模块
go mod init go-study/examples/microservices/06-ecommerce-microservices
# 用户服务
cd user-service
go mod init go-study/examples/microservices/06-ecommerce-microservices/user-service
# 订单服务
cd ../order-service
go mod init go-study/examples/microservices/06-ecommerce-microservices/order-service
# 商品服务
cd ../product-service
go mod init go-study/examples/microservices/06-ecommerce-microservices/product-service
# 网关
cd ../gateway
go mod init go-study/examples/microservices/06-ecommerce-microservices/gateway3. 安装核心依赖
用户服务依赖
bash
cd user-service
go get google.golang.org/grpc
go get google.golang.org/protobuf
go get github.com/hashicorp/consul/api
go get github.com/mattn/go-sqlite3订单服务依赖
bash
cd ../order-service
go get google.golang.org/grpc
go get google.golang.org/protobuf
go get github.com/hashicorp/consul/api
go get github.com/mattn/go-sqlite3商品服务依赖
bash
cd ../product-service
go get google.golang.org/grpc
go get google.golang.org/protobuf
go get github.com/hashicorp/consul/api
go get github.com/mattn/go-sqlite3网关依赖
bash
cd ../gateway
go get github.com/gin-gonic/gin
go get google.golang.org/grpc
go get google.golang.org/protobuf
go get github.com/hashicorp/consul/api📁 项目结构详解
完整目录结构
06-ecommerce-microservices/
├── proto/ # Protocol Buffers 定义
│ ├── user/ # 用户服务 proto
│ │ └── user.proto
│ ├── order/ # 订单服务 proto
│ │ └── order.proto
│ ├── product/ # 商品服务 proto
│ │ └── product.proto
│ └── Makefile # 代码生成脚本
├── user-service/ # 用户服务
│ ├── main.go
│ ├── go.mod
│ └── go.sum
├── order-service/ # 订单服务
│ ├── main.go
│ ├── go.mod
│ └── go.sum
├── product-service/ # 商品服务
│ ├── main.go
│ ├── go.mod
│ └── go.sum
├── gateway/ # API 网关
│ ├── main.go
│ ├── go.mod
│ └── go.sum
├── docs/ # 文档
│ ├── architecture.md
│ ├── deployment.md
│ ├── development.md
│ └── api.md
├── docker-compose.yml # Docker Compose 配置
├── go.mod # 根模块
└── README.md # 项目说明目录说明
- proto/: 存放所有服务的 Protocol Buffers 定义文件
- user-service/: 用户服务,处理用户相关业务
- order-service/: 订单服务,处理订单相关业务
- product-service/: 商品服务,处理商品相关业务
- gateway/: API 网关,统一入口和路由转发
- docs/: 项目文档
🔧 Protocol Buffers 配置
1. 安装 Protocol Buffers 编译器
bash
# macOS
brew install protobuf
# Linux
sudo apt-get install protobuf-compiler
# 验证安装
protoc --version2. 安装 Go 插件
bash
go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
go install google.golang.org/grpc/cmd/protoc-gen-go-grpc@latest3. 创建 Makefile
在 proto/ 目录下创建 Makefile:
makefile
.PHONY: proto clean
proto:
@echo "生成 Go 代码..."
protoc --go_out=. --go_opt=paths=source_relative \
--go-grpc_out=. --go-grpc_opt=paths=source_relative \
user/user.proto order/order.proto product/product.proto
clean:
@echo "清理生成的文件..."
rm -rf user/*.pb.go
rm -rf order/*.pb.go
rm -rf product/*.pb.go4. 生成代码
bash
cd proto
make proto🏗️ Consul 服务发现配置
1. 安装 Consul
bash
# macOS
brew install consul
# Linux
wget https://releases.hashicorp.com/consul/1.16.0/consul_1.16.0_linux_amd64.zip
unzip consul_1.16.0_linux_amd64.zip
sudo mv consul /usr/local/bin/2. 启动 Consul
bash
# 开发模式启动
consul agent -dev
# 或者使用 Docker
docker run -d --name consul -p 8500:8500 consul:latest3. 验证 Consul
访问 Consul UI: http://localhost:8500
或使用命令行:
bash
consul members
curl http://localhost:8500/v1/agent/services📝 配置文件
环境变量
各服务可以通过环境变量配置:
bash
# Consul 地址
export CONSUL_ADDR=localhost:8500
# 服务端口
export USER_SERVICE_PORT=5001
export ORDER_SERVICE_PORT=5002
export PRODUCT_SERVICE_PORT=5003
export GATEWAY_PORT=8080Docker Compose 配置
创建 docker-compose.yml:
yaml
version: '3.8'
services:
consul:
image: consul:latest
container_name: consul
ports:
- "8500:8500"
command: consul agent -dev -client=0.0.0.0 -ui
networks:
- microservices
networks:
microservices:
driver: bridge启动 Consul:
bash
docker-compose up -d consul✅ 验证环境
1. 检查 Go 环境
bash
go version2. 检查 Protocol Buffers
bash
protoc --version
which protoc-gen-go
which protoc-gen-go-grpc3. 检查 Consul
bash
consul version
curl http://localhost:8500/v1/status/leader🐛 常见问题
Protocol Buffers 生成失败
问题: protoc: command not found
解决: 确保已安装 protobuf 编译器,并添加到 PATH
Go 插件未找到
问题: protoc-gen-go: program not found
解决:
bash
export PATH=$PATH:$(go env GOPATH)/binConsul 连接失败
问题: 服务无法连接到 Consul
解决:
- 检查 Consul 是否运行:
consul members - 检查端口是否被占用:
lsof -i :8500 - 检查防火墙设置
端口冲突
问题: 端口已被占用
解决:
- 修改服务端口配置
- 或停止占用端口的进程
📚 下一步
环境搭建完成后,可以继续:
✅ 环境搭建完成! 现在可以开始实现各个微服务了。
