在最近的技术探索中,我触到了一个全新的开源RPC框架——tRPC。这个新框架给我留下了深刻的印象,我想借此机会分享一下我的初体验和一些观察。
tRPC是一个高性能、轻量级、支持多语言的开源RPC框架,基于插件化理念设计,整体特点:
具体可以查看官网(https://trpc.group/)和开源仓库(https://github.com/trpc-group)了解
首先我们先clone一下GitHub仓库中的trpc-go:git clone https://github.com/trpc-group/trpc-go
,找到example目录下的helloworld目录:
按照文档我们可以先运行一下:
server端
cd trpc-go\examples\helloworld\server
go run main.go -conf ./trpc_go.yaml
client端
cd trpc-go\examples\helloworld\client
go run main.go
很明显我们发现tRPC服务端的运行是需要配置文件的,这个我们放在下面再讲,接下来我们仿照helloworld程序手动的了解下tRPC一个接口的创建和调用过程:
第一步:安装tRPC中对于protobuf文件的编译工具
go install trpc.group/trpc-go/trpc-cmdline/trpc@latest
第二步:在protobuf文件中增加接口定义
syntax = "proto3";
package trpc.helloworld;
option go_package="trpc.group/trpc-go/trpc-go/examples/helloworld/pb";
service Greeter {
rpc Hello (HelloRequest) returns (HelloReply) {}
rpc Hi (HiRequest) returns (HiResponse) {}
}
message HelloRequest {
string msg = 1;
}
message HelloReply {
string msg = 1;
}
message HiRequest {
string name = 1;
}
message HiResponse {
string msg = 1;
}
第三步:编译protobuf文件(参考Makefile中的命令)
trpc create -p helloworld.proto --rpconly --nogomod --mock=false
第四步:编写RPC服务端接口实现
func main() {
s := trpc.NewServer()
pb.RegisterGreeterService(s, &Greeter{})
if err := s.Serve(); err != nil {
log.Error(err)
}
}
type Greeter struct{}
func (g Greeter) Hello(ctx context.Context, req *pb.HelloRequest) (*pb.HelloReply, error) {
log.Infof("got hello request: %s", req.Msg)
return &pb.HelloReply{Msg: "Hello " + req.Msg + "!"}, nil
}
func (g Greeter) Hi(ctx context.Context, req *pb.HiRequest) (*pb.HiResponse, error) {
log.Infof("got hi request: %s", req.Name)
return &pb.HiResponse{Msg: "Hi " + req.GetName() + "!"}, nil
}
第五步:RPC客户端调用接口
func main() {
c := pb.NewGreeterClientProxy(client.WithTarget("ip://127.0.0.1:8000"))
rsp, err := c.Hi(context.Background(), &pb.HiRequest{Name: "海风极客"})
if err != nil {
log.Error(err)
}
log.Info(rsp.Msg)
}
最后依次运行服务端和客户端代码就可以了
因为在使用tRPC之前,最熟悉的还是gRPC,相比gRPC,我觉得tRPC在以下几个方面与之不同(也是刚刚了解,先分享主要的几个):
(1)首先,名字不同
一个叫gRPC,由Google开源,一个叫tRPC,由腾讯开源
(2)tRPC更倾向于插件化
阅读源码后我们大概可以得出结论,虽然tRPC和gRPC都支持拦截器,但是tRPC能够通过抽象让用户自定义更多的插件并注入到服务中,增加了灵活性和可扩展性
(3)tRPC支持配置文件
配置文件应该是tRPC与gRPC最大的不同之一,当然通过简单的编码后两者都可以支持配置文件,但是tRPC作为原生就支持配置文件的RPC框架,可以用配置文件的配置内容来替代很多代码逻辑。其中配置文件最大的一个优势就是修改配置时无需重新编译源代码,节省了编译时间,但是如果对配置文件了解的不够全面,也可能是一个隐患,因此是需要一些学习理解的时间成本的,反正各有利弊吧。
通过对tRPC的初步探索,我对这个开源RPC框架留下了深刻的印象。它的高性能、易用性、可扩展性和安全性使其成为构建分布式应用程序的理想选择。如果你正在寻找一个轻量级且功能强大的RPC框架,那么我强烈推荐你尝试一下tRPC,相信它会为你的项目带来意想不到的收获。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。