grpc入门和进阶
grpc入门和进阶
.番茄炒蛋
这个作者很懒,什么都没留下…
展开
-
grpc-middleware实现grpc调用重试
代码】grpc-middleware实现grpc调用重试。原创 2022-07-20 22:14:17 · 402 阅读 · 0 评论 -
gRPC超时机制
简介 其实不止再微服务中,再平常的网络请求或者第三方系统进行交互都需要设置超时时间;为什么需要超时机制? 总体上讲,肯定是为了增加系统的可靠性:系统自我保护:快速失败,在业务最大允许等待时间内未收到返回数据,主动放弃等待,释放占用资源,避免请求不断累积带来的客户端雪崩效应成功率:服务处理超时的原因有很多,但常见的超时都是短暂的,主要是:网络抖动或者网络拥塞;这些短时间影响服务端状态的情况而造成请求成功率下原创 2022-05-22 15:13:10 · 2343 阅读 · 0 评论 -
gRPC集成protoc-gen-validate
protoc-gen-validate简介安装和配置Linux执行make build之前需要先切换到protoc-gen-validate路径下;因为make build执行的就是这个路径下的Makefile;一定要确保在对应的路径下,这样make build才不会出错# fetches this repo into $GOPATHgo get -d github.com/envoyproxy/protoc-gen-validate# installs PGV into $GOPATH/bi原创 2022-05-20 00:28:40 · 3581 阅读 · 0 评论 -
gRPC完成简单的auth认证
metadata+拦截器protosyntax = "proto3";option go_package = ".;proto";service Greeter{ rpc SayHello(HelloRequest) returns(HelloReply);}message HelloRequest { string name = 1;}message HelloReply{ string message = 1;}.pb.go// Code generated b原创 2022-05-19 21:32:11 · 796 阅读 · 0 评论 -
gRPC拦截器
简介grpc服务端和客户端都提供了拦截器interceptor功能,功能类似中间件go-grpc-middleware,很适合在这里处理验证、日志等流程。代码protosyntax = "proto3";option go_package = ".;proto";service Greeter{ rpc SayHello(HelloRequest) returns (HelloReply);}message HelloRequest{ string name = 1;}原创 2022-05-18 20:32:34 · 1095 阅读 · 0 评论 -
go控制gRPC的metadata
简介官方文档githubgRPC让我们可以像本地调用一样实现远程调用,对于每一次的RPC调用中,都可能会有一些有用的数据,而这些数据就可以通过metadata来传递。metadata是以key-value的形式存储数据的,其中key是string类型,而value是[]string,即一个字符串切片。metadata使得client和server能够为对方提供关于本次调用的一些信息,就像一次http请求的RequestHeader和ResponseHeader一样。http中header的生命周周期原创 2022-05-17 22:13:36 · 450 阅读 · 0 评论 -
gRPC双向数据流快速体验
简介双向数据流模式(Bidirectional streaming RPC) 顾名思义,这是客户端和服务端都可以向对方发送数据流,这个时候双方的数据可以同时互相发送,也就是可以实现实时交互。典型的应用场景是聊天机器人。代码由于这次实现的是双向数据流,需要保证接收数据和发送数据要保证并行,所以需要使用到协程。protosyntax = "proto3";option go_package = ".;proto";service AllStream{ rpc AllStream(st原创 2022-05-12 22:47:34 · 912 阅读 · 0 评论 -
gRPC客户端数据流快速体验
简介客户端数据流模式(Client-side streaming RPC)与服务端数据流模式相反,这次是客户端源源不断的向服务端发送数据流,而在发送结束后,由服务端返回一个响应。典型的应用场景是物联网终端向服务器报送数据。代码protosyntax = "proto3";option go_package = ".;proto";service GetStream{ rpc GetStream(StreamRequestData) returns (stream StreamRes原创 2022-05-12 22:23:19 · 757 阅读 · 0 评论 -
gRPC服务端数据流快速体验
简介服务端数据流模式(Server-side streaming RPC)是客户端发起一次请求,服务端返回一段连续的数据流。典型的应用场景是客户端向服务端发送一个股票代码,服务端就把该股票的实时数据源源不断的返回给客户端。代码protosyntax = "proto3";option go_package = ".;proto";service GetStream{ rpc GetStream(StreamRequestData) returns (stream StreamRes原创 2022-05-12 21:50:55 · 201 阅读 · 0 评论 -
gRPC简单模式快速体验
简介简单模式(一元调用)最为传统;即客户端发起一次请求,服务端响应一个数据;这和平常熟悉的RPC没有大的区别代码protosyntax = "proto3";option go_package = ".;proto";message HelloRequest{ string name = 1;}message HelloResponse{ string message = 1;}service Greeter{ rpc SayHello(HelloRequest)原创 2022-05-12 20:21:30 · 156 阅读 · 0 评论 -
protobuf和json的对比
protobuf简介习惯用Json,XML数据储存格式的程序员,大多都没听说过Protocol Buffer(ProtoBuf go初体验博客)Protocol Buffer其实是Google出品的一种轻量&高效的结构化数据储存格式,性能比Json,XML真的强太多protobuf经历了protobuf2和protobuf3,pb3比pb2简化了很多,目前主流的版本是pb3protobuf优缺点优点性能压缩性好序列化和反序列化快 (比XML和Json快2-100倍)传输速原创 2022-05-12 19:04:16 · 8987 阅读 · 1 评论 -
go快速体验RPC
快速体验Serverpackage mainimport ( "net" "net/rpc")type HelloService struct{}func (s *HelloService) Hello(request string, reply *string) error { // 真正的返回值是修改后的reply *reply = "hello, " + request return nil}func main() { // 实例化一个server listen,原创 2022-05-11 20:59:15 · 456 阅读 · 0 评论 -
通过http完成简单的RPC调用
Serverpackage mainimport ( "encoding/json" "fmt" "net/http" "strconv")func main() { http.HandleFunc("/add", func(writer http.ResponseWriter, request *http.Request) { _ = request.ParseForm() fmt.Println("path: ", request.URL.Path) a, _ := s原创 2022-05-11 19:26:00 · 734 阅读 · 0 评论 -
什么是RPC
什么是RPCRPC(Remote Procedure Call)远程过程调用,简单的理解是一个节点请求另一个节点提供的服务。是一种进程间的通信方式,它允许应用程序调用网络上的另一个应用程序中的方法,对于服务的消费者而言,无需了解远程调用的底层细节,是透明的,需要注意的是RPC并不是一个具体的技术,而是指整个网络远程调用过程。RPC远程过程调用,是分布式架构的核心,按响应方式分如下两种:同步调用:客户端调用服务方方法,等待直到服务方返回结果或者超时,再继续自己的操作。异步调用:客户端把消息发送给原创 2022-05-10 21:55:57 · 812 阅读 · 0 评论