准备工作
本机器这里已经安装好了 go、kratos、proto、wire、make
等所需的工具。
初始化项目目录
进入自己电脑中存放 Go 项目的目录
新建 kratos-shop/service
目录,并进入到新建的目录中
执行 kratos new user
命令并进入 user
目录,执行命令 kratos proto add api/user/v1/user.proto
,
这时你在 /service/user/api/user/v1
目录下会看到新的 user.proto
文件已经创建好了
接下来执行 kratos proto server api/user/v1/user.proto -t internal/service
命令生成对应的 service
文件。
删除不需要的 proto 文件 rm -rf api/helloworld/
删除不需要的 service 文件 rm internal/service/greeter.go
-
完整的命令代码如下
mkdir -p kratos-shop/service
cd kratos-shop/service
kratos new user
cd user
kratos proto add api/user/v1/user.proto
kratos proto server api/user/v1/user.proto -t internal/service
rm -rf api/helloworld/
rm internal/service/greeter.go
复制代码
-
修改
user.proto
文件,内容如下:
proto 基本的语法请自行学习,目前这里的只先提供了一个创建用户的 rpc 接口,后续会逐步添加其他 rpc 接口
syntax = "proto3";
package user.v1;
option go_package = "user/api/user/v1;v1";
service User{
rpc CreateUser(CreateUserInfo) returns (UserInfoResponse); // 创建用户
}
// 创建用户所需字段
message CreateUserInfo{
string nickName = 1;
string password = 2;
string mobile = 3;
}
// 返回用户信息
message UserInfoResponse{
int64 id = 1;
string password = 2;
string mobile = 3;
string nickName = 4;
int64 birthday = 5;
string gender = 6;
int32 role = 7;
}
复制代码
-
生成
user.proto
定义的接口信息
进入到 service/user
目录下,执行 make api
命令,
这时可以看到 user/api/user/v1/
目录下多出了 proto 创建的文件
cd user
make api
# 目录结构如下:
├── api
│ └── user
│ └── v1
│ ├── user.pb.go
│ ├── user.proto
│ └── user_grpc.pb.go
复制代码
修改配置文件
-
修改
user/configs/config.yaml
文件,代码如下:
具体链接 mysql、redis 的参数填写自己本机的,本项目用到的是 gorm 。trace 是以后要用到的链路追踪的参数,先定义了。
server:
http:
addr: 0.0.0.0:8000
timeout: 1s
grpc:
addr: 0.0.0.0:50051
timeout: 1s
data:
database:
driver: mysql
source: root:root@tcp(127.0.0.1:3306)/shop_user?charset=utf8mb4&parseTime=True&loc=Local
redis:
addr: 127.0.0.1:6379
dial_timeout: 1s
read_timeout: 0.2s
write_timeout: 0.2s
trace:
endpoint: http://127.0.0.1:14268/api/traces
复制代码
-
引入 consul 服务
新建 user/configs/registry.yaml
文件,代码如下:
# 这里引入了 consul 的服务注册与发现,先把配置加入进去
consul:
address: 127.0.0.1:8500
scheme: http
复制代码
-
修改
user/internal/conf/conf.proto
配置文件
# 文件底部新增 consul 和 trace 的配置信息
message Trace {
string endpoint = 1;
}
message Registry {
message Consul {
string address = 1;
string scheme = 2;
}
Consul consul = 1;
}
复制代码
-
新生成
conf.pb.go
文件,执行make config
# `service/user` 目录下,执行命令
make config
复制代码
安装 consul 服务工具
# 这里使用的是 docker 工具进行创建的
docker run -d -p 8500:8500 -p 8300:8300 -p 8301:8301 -p 8302:8302 -p 8600:8600/udp consul consul agent -dev -client=0.0.0.0
# 浏览器访问 http://127.0.0.1:8500/ui/dc1/services 测试是否安装成功
复制代码
修改 internal 服务目录
修改 user/internal/data/
目录下的文件
-
修改
data.go
添加如下内容:
package data
import (
"github.com/go-kratos/kratos/v2/log"
"github.com/go-redi