rpc编写与调用
在一个大的系统中,多个子系统(服务)间必然存在数据传递,有数据传递就需要通信方式,你可以选择最简单的http进行通信,也可以选择rpc服务进行通信, 在go-zero,我们使用zrpc来进行服务间的通信,zrpc是基于grpc。
#
场景在前面我们完善了对用户进行登录,用户查询图书等接口协议,但是用户在查询图书时没有做任何用户校验,如果当前用户是一个不存在的用户则我们不允许其查阅图书信息, 从上文信息我们可以得知,需要user服务提供一个方法来获取用户信息供search服务使用,因此我们就需要创建一个user rpc服务,并提供一个getUser方法。
#
rpc服务编写- 编译proto文件
- 生成rpc服务代码
tip
如果安装的 protoc-gen-go
版大于1.4.0, proto文件建议加上go_package
- 添加配置及完善yaml配置项
tip
$user: mysql数据库user
$password: mysql数据库密码
$url: mysql数据库连接地址
$db: mysql数据库db名称,即user表所在database
$host: redis连接地址 格式:ip:port,如:127.0.0.1:6379
$pass: redis密码
$etcdHost: etcd连接地址,格式:ip:port,如: 127.0.0.1:2379
更多配置信息,请参考rpc配置介绍
- 添加资源依赖
- 添加rpc逻辑
#
使用rpc接下来我们在search服务中调用user rpc
- 添加UserRpc配置及yaml配置项
tip
$AccessSecret:这个值必须要和user api中声明的一致。
$AccessExpire: 有效期
$etcdHost: etcd连接地址
etcd中的Key
必须要和user rpc服务配置中Key一致
- 添加依赖
- 补充逻辑
#
启动并验证服务- 启动etcd、redis、mysql
- 启动user rpc
- 启动search api
- 验证服务