Rpc 的时代要来临了
1 RPC的阐述
rpc就是远程调用的意思 客户端发送一个数据 服务端接手并且解析 中间过程互相建立tcp 连接 ,指定的协议规范 可以用以下这个协议 为什么要用它呢 现如今时代异构系统互相调用 方便而且传输不比json慢
Google Protocol Buffer( 简称 Protobuf)
轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储。
特点:性能高、传输快、维护方便,反正就是各种好,各种棒
一些第三方rpc库都会支持protobuf
2 RPC的使用方式
2.1 安装
https://github.com/protocolbuffers/protobuf/releases/latest
下载它 并且解压 把protoc39\bin 加入到你的环境变量
这是protobuf编译器,将.proto文件,转译成protobuf的原生数据结构
2.2 GO中的使用方式
2.2.1 首先你要使用go的一个插件 go get github.com/golang/protobuf/protoc-gen-go 此时会在你的GOPATH 的bin目录下生成可执行文件. protobuf的编译器插件protoc-gen-go
2.2.2 创建如下中间文件叫做prod.proto
syntax="proto3";
message ProdRequest {
int32 prod_id =1; //传入的商品ID
}
message ProdResponse{
int32 prod_stock=1;//商品库存
}
然后执行 protoc --go_out=../Prod.proto 就会生成一个协议文件,大致完成。
3 RPC 的服务端简单使用 【以GO做个范列】
3.3.1 建立一个服务结构体文件Prod.proto
syntax="proto3";
package services;
message ProdRequest {
int32 prod_id =1; //传入的商品ID
}
message ProdResponse{
int32 prod_stock=1;//商品库存
}
3.3.2 建立一个服务结构体
type ProdService struct {
}
func(this *ProdService) GetProdStock(ctx context.Context, request *ProdRequest) (*ProdResponse, error) {
return &ProdResponse{ProdStock:20},nil
}
3.3.3 建立一个RPC服务 端口8081
rpcServer:=grpc.NewServer()
services.RegisterProdServiceServer(rpcServer,new(services.ProdService))
lis,_:=net.Listen("tcp",":8081")
rpcServer.Serve(lis)
注意:使用此包来开发
google.golang.org/grpc
4 RPC的客户端调用 【以GO做个范列】
引入 google.golang.org/grpc 这个包
client,err:=grpc.Dial(":8081",grpc.WithInsecure())
if err!=nil{
log.Fatal(err)
}
defer client.Close()
prodClient:=services.NewProdServiceClient(client)
res,err:=prodClient.GetProdStock(
context.Background(),
&services.ProdRequest{ProdId:12},
)
if err!=nil{
log.Fatal(err)
}
fmt.Println(res.ProdStock)
本作品采用《CC 协议》,转载必须注明作者和本文链接
阿里云的国际短信现在就是用 RPC 了
==
标题党到这种程度?还以为是有什么事件,结果就这样而已?
水经验,没卵用