1 Star 2 Fork 1

vincent / go-zero-learning-multi-rpc

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

go-zero-learning-multi-rpc

介绍

go-zero 框架的多微服务示例

书店服务示例简介

为了教程简单,我们用书店服务做示例,并且只实现其中的增加书目和检查价格功能。

写此书店服务是为了从整体上演示go-zero构建完整微服务的过程,实现细节尽可能简化了。

书店微服务架构图

在这里插入图片描述

goctl各层代码生成一览

所有绿色背景的功能模块是自动生成的,按需激活,红色模块是需要自己写的,也就是增加下依赖,编写业务特有逻辑,各层示意图分别如下:

  • API Gateway

描述

  • RPC

miaoshu

  • model

准备工作

• 安装etcd, mysql, redis

• 安装protoc-gen-go

GOPROXY=https://goproxy.cn/,direct go get -u github.com/golang/protobuf/protoc-gen-go

• 安装goctl工具

GO111MODULE=on GOPROXY=https://goproxy.cn/,direct go get -u github.com/tal-tech/go-zero/tools/goctl

• 创建工作目录bookstore

• 在bookstore目录下执行go mod init bookstore初始化go.mod

编写API Gateway代码

• 在bookstore/api目录下通过goctl生成api/bookstore.api:

goctl api -o bookstore.api

• 使用goctl生成API Gateway代码

goctl api go -api bookstore.api -dir .

生成的文件结构如下:

api
├── bookstore.api                  // api定义
├── bookstore.go                   // main入口定义
├── etc
│   └── bookstore-api.yaml         // 配置文件
└── internal
    ├── config
    │   └── config.go              // 定义配置
    ├── handler
    │   ├── addhandler.go          // 实现addHandler
    │   ├── checkhandler.go        // 实现checkHandler
    │   └── routes.go              // 定义路由处理
    ├── logic
    │   ├── addlogic.go            // 实现AddLogic
    │   └── checklogic.go          // 实现CheckLogic
    ├── svc
    │   └── servicecontext.go      // 定义ServiceContext
    └── types
        └── types.go               // 定义请求、返回结构体

• 启动API Gateway服务,默认侦听在8888端口

go run bookstore.go -f etc/bookstore-api.yaml

编写add rpc服务

• 在rpc/add目录下编写add.proto文件 可以通过命令生成proto文件模板

goctl rpc template -o add.proto

修改后文件内容如下:

syntax = "proto3";

package add;

message addReq {
    string book = 1;
    int64 price = 2;
}

message addResp {
    bool ok = 1;
}

service adder {
    rpc add(addReq) returns(addResp);
}

• 用goctl生成rpc代码,在rpc/add目录下执行命令

goctl rpc proto -src add.proto -dir .

文件结构如下:

rpc/add
├── add.go                      // rpc服务main函数
├── add.proto                   // rpc接口定义
├── adder
│   ├── adder.go                // 提供了外部调用方法,无需修改
│   ├── adder_mock.go           // mock方法,测试用
│   └── types.go                // request/response结构体定义
├── etc
│   └── add.yaml                // 配置文件
├── internal
│   ├── config
│   │   └── config.go           // 配置定义
│   ├── logic
│   │   └── addlogic.go         // add业务逻辑在这里实现
│   ├── server
│   │   └── adderserver.go      // 调用入口, 不需要修改
│   └── svc
│       └── servicecontext.go   // 定义ServiceContext,传递依赖
└── pb
    └── add.pb.go

直接可以运行,如下:

$ go run add.go -f etc/add.yaml
Starting rpc server at 127.0.0.1:8080...

etc/add.yaml文件里可以修改侦听端口等配置

空文件

简介

go-zero 框架的多微服务示例 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Go
1
https://gitee.com/myn_wsc/go-zero-learning-multi-rpc.git
git@gitee.com:myn_wsc/go-zero-learning-multi-rpc.git
myn_wsc
go-zero-learning-multi-rpc
go-zero-learning-multi-rpc
master

搜索帮助