Go-zero微服务篇之RPC demo

先使用goctl生成一个proto然后修改一下通过proto生成pb那些等等

syntax = "proto3";
package server;
message Request {
string ping = 1;
}
message Response {
string pong = 1;
}
message LoginReq{
string name=1;
}
message LoginRep{
string msg=1;
}
service Server {
rpc Ping(Request) returns(Response);
rpc Login(LoginReq) returns(LoginRep);
}
Server logic逻辑处理

package logic
import (
"context"
"fmt"
"server/internal/svc"
"server/server"
"github.com/tal-tech/go-zero/core/logx"
)
type LoginLogic struct {
ctx context.Context
svcCtx *svc.ServiceContext
logx.Logger
}
func NewLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LoginLogic {
return &LoginLogic{
ctx: ctx,
svcCtx: svcCtx,
Logger: logx.WithContext(ctx),
}
}
func (l *LoginLogic) Login(in *server.LoginReq) (*server.LoginRep, error) {
// todo: add your logic here and delete this line
return &server.LoginRep{
Msg:fmt.Sprintf("登陆成功:%s",in.Name),
}, nil
}
etcd配置

客户端与服务的配置的etcd信息一一对应

package main
import (
"context"
"fmt"
"log"
pb "server/server"
"github.com/tal-tech/go-zero/core/discov"
"github.com/tal-tech/go-zero/zrpc"
)
func main() {
client := zrpc.MustNewClient(zrpc.RpcClientConf{
Etcd: discov.EtcdConf{
Hosts: []string{"127.0.0.1:2379"},
Key: "server.rpc",
},
})
hello := pb.NewServerClient(client.Conn())
reply, err := hello.Login(context.Background(), &pb.LoginReq{Name: "go-zero"})
if err != nil {
log.Fatal(err)
}
fmt.Println(reply.Msg)
}


本文系作者 @孤独常伴 原创发布在 L0ne1y。未经许可,禁止转载。