grpc服务端(数据库相关)
·
项目源码 博客地址
第一步,启动GRPC服务
//启动GRPC
grpcServer := grpc.NewServer()
//注册一个GRPC服务
server.RegisterServer(grpcServer)
//注册GRPC反射服务
reflection.Register(grpcServer)
//以TCP协议启动GRPC
err = grpcServer.Serve(Listen)
启动TCP服务
Listen, err := net.Listen("tcp", PORT)
if err != nil {
fmt.Println(err.Error())
return
}
第二步,在对应的服务端封装方法
func RegisterServer(s *grpc.Server) {
bean.RegisterUserServiceServer(s, &User{})
bean.RegisterUserfServiceServer(s, &Userf{})
}
.proto文件
syntax = "proto3"; //指定版本
option go_package = "../bean";
package bean;
service UserService{
rpc User(UserRequest) returns (UserResponse){}
}
// 函数参数
message UserRequest{
string name = 1;
int32 age=2;
string sex=3;
}
// 函数返回值
message UserResponse{
int32 code=1;
string msg=2;
}
生成.pb.go&grpc.pb.go文件
protoc --go_out=./ .\文件
protoc --go-grpc_out=./ .\文件
第三步,实现第二步封装的方法
type User struct {
*bean.UnimplementedUserServiceServer
}
func (user *User) User(ctx context.Context, in *bean.UserRequest) (*bean.UserResponse, error) {
var res = &bean.UserResponse{
Code: 200,
Msg: "success",
}
//执行操作
err := professor.AddUser(in)
//
if err != nil {
res.Code = 5000
res.Msg = "服务繁忙"
return res, nil
}
return res, nil
}
第四步,实现的方法调用processor(对req数据加工)方法实习数据库操作
func (user *User) User(ctx context.Context, in *bean.UserRequest) (*bean.UserResponse, error) {
var res = &bean.UserResponse{
Code: 200,
Msg: "success",
}
//调用processor(对req数据加工)方法实习数据库操作,返回值是error
err := professor.AddUser(in)
if err != nil {
res.Code = 5000
res.Msg = "服务繁忙"
return res, nil
}
return res, nil
}
第五步,实现processor的方法
func AddUser(req *bean.UserRequest) error {
tx, _ := dbc.Mysql.Begin()
//数据库方法调用
err := db.MYSQL_AddUser(req, tx)
if err != nil {
return err
}
err = db.MONGO_AddRoomLayout(req)
if err != nil {
return err
}
return nil
}
第六步,实现数据库方法
封装
func MYSQL_AddUser(req *bean.UserRequest, tx *sql.Tx) error {
return mysql.AddUser(req, tx)
}
func MYSQL_FindUser() error {
return mysql.FindUser()
}
实现
func AddUser(req *bean.UserRequest, tx *sql.Tx) error {
str2 := "INSERT INTO user(name,age,sex) VALUES(?,?,?) "
_, err := tx.Exec(str2, req.Name, req.Age, req.Sex)
// fmt.Println("执行sql语句" + str2)
// fmt.Printf("req: %v %v %v\n", req.Name, req.Age, req.Sex)
if err != nil {
fmt.Println(err.Error())
return err
}
tx.Commit()
fmt.Println("Mysql执行sql语句")
return nil
}
最后postman测试成功
更多推荐
所有评论(0)