make env-up # 启动环境
make agent # 编译Agent二进制文件
make user # 启动用户摸块
make task # 启动任务模块
make experimental # 启动实验性模块
make api # 启动网关本项目接入了skywalking-go,如果不打算使用skywalking,可以不执行上述命令中的make agent,同时请在Makefile中删除如下内容
$(SERVICES):
$(GO_BUILD) \
-o $(BIN)/$(service) \
-toolexec="$(AGENT_PATH) -config $(AGENT_CONFIG)" \ # 删除此行
$(CMD)/$(service)
$(BIN)/$(service) -config $(CONFIG_PATH) -srvnum=$(node)在Postman中导入./postman文件夹下的配置即可
需要编辑的变量有
host: 网关地址token: 鉴权
这个项目支持轮询(Round-Robin)的负载均衡策略
只需要在./config/config.yaml中将load-balance设置为true便可启用该模块的负载均衡
make env-up api # 开发环境与HTTP服务器
make experimental node=0 # rpc节点1
make experimental node=1 # rpc节点2之后我们可以通过多次请求experimental/ping接口来测试负载均衡
在./cmd中,可以发现experimental的rpc服务端源代码,它包含以下方法
service ExperimentalService {
rpc Ping (Request) returns (Response) {} // Unary请求
rpc ClientStream (stream Request) returns (Response) {} // 客户端发送流式请求
rpc ServerStream (Request) returns (stream Response) {} // 服务端回复流式请求
rpc BidirectionalStream (stream Request) returns (stream Response) {} // 双向流式请求
}实验模块是一个简易版的rpc服务端,用来对grpc特性进行调试
我们可以在该实验性模块中探索grpc的stream特性,这部分代码逻辑在./cmd/experimental/handler.go中有较为完备的注释
http
┌────────────────────────┐
┌─────────────────────────┤ ├───────────────────────────────┐
│ │ api │ │
│ ┌─────────────────►| │◄──────────────────────┐ │
│ │ └───────────▲────────────┘ │ │
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ resolve │ │
│ │ │ │ │
req resp │ resp req
│ │ │ │ │
│ │ │ │ │
│ │ │ │ │
│ │ ┌──────────▼─────────┐ │ │
│ │ │ │ │ │
│ │ ┌──────────►| Etcd |◄────────────────┐ │ │
│ │ │ │ │ │ │ │
│ │ │ └────────────────────┘ │ │ │
│ │ │ │ │ │
│ │ register register │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
│ │ │ │ │ │
┌▼──────┴───────┴───┐ ┌──┴────────┴───────▼─┐
│ │───────────────── req ────────────────────►│ │
│ user │ │ task │
│ │◄──────────────── resp ────────────────────│ │
└───────────────────┘ └─────────────────────┘
protobuf protobuf
.
├── Makefile
├── README.md
├── bin # 项目编译的二进制文件
├── cmd
│ ├── api # 网关
│ ├── task # 任务模块
│ ├── experimental # 实验性功能
│ └── user # 用户模块
├── config
│ ├── config.go
│ ├── config.yaml # 配置项
│ └── sql # sql建表语句
├── docker-compose.yml
├── go.mod
├── go.sum
├── postman # 接口测试配置
├── idl
│ ├── pb
│ ├── task.proto
│ └── user.proto
└── pkg
├── errno # 自定义错误
└── utils # 杂项
.
├── dal
│ ├── db # 数据库操作
│ └── init.go
├── handler.go # 请求解析/封装
├── main.go
├── model # 数据库映射
│ └── model.go
├── pack # 打包
│ └── pack.go
└── service # 处理请求
└── service.go
.
├── handler # 请求处理
│ ├── handler.go
│ ├── task.go
│ └── user.go
├── main.go
├── middleware # gin中间件
│ └── jwt.go
├── routes # 路由
│ └── routes.go
├── rpc # rpc调用
│ ├── init.go
│ ├── task.go
│ └── user.go
└── types # 自定义类型
├── task.go
├── types.go
└── user.go
make env-up # 启动环境
make env-down # 结束环境
make proto # 更新protoc
make agent # 编译skywalking-go的代理
make user # 启动用户摸块
make task # 启动任务模块
make experimental # 启动实验模块
make api # 启动网关在启动模块时,我们支持指定监听地址的序号,只需要在config.yaml中对模块设置多个监听地址,同时运行时添加node参数即可
make user node=0 # 运行user模块的第0个地址