zl程序教程

golang-grpc

  • golang源码分析:grpc 链接池(1)

    golang源码分析:grpc 链接池(1)

    开始源码分享之前,我们先问自己几个问题:1,grpc client和server之间是长链接还是短链接?2,我们通过grpc.Dial拿到的*ClientConn对应的是一个连接么?3,grpc.Dial 拿到的连接应该什么时候释放?4,同一个*ClientConn,多次rpc请求,中间连接会断开么? 5,如果一个连接不断开,心跳机制是在哪里实现的?需要我们自己实现吗?

    日期 2023-06-12 10:48:40     
  • golang源码分析:grpc 链接池(2)

    golang源码分析:grpc 链接池(2)

    继续上一篇golang源码分析:grpc 链接池(1),我们从源码来分析,我们将从连接池的建立,请求发起的时候获取连接,以及最终关闭连接三个流程进行源码分析。 1,创建连接的过程 源码入口位于google.golang.org/grpc@v1.46.0/clientconn.gofunc Dial(target string, opts ...DialOption

    日期 2023-06-12 10:48:40     
  • golang源码分析:grpc 链接池(3)resolver 、balancer和picker

    golang源码分析:grpc 链接池(3)resolver 、balancer和picker

    在分析完grpc连接的创建、使用和销毁过程后golang源码分析:grpc 链接池(2),我们来分析下grpc留给我们的编程扩展接口resolver 、balancer和picker是如何嵌入grpc连接池的。 总的来说:每个 ClientConn 对应有多个 SubConn,ClientConn 会基于名字发现(resolver)得到多个 SubConn,并面向多个

    日期 2023-06-12 10:48:40     
  • golang源码分析:grpc 链接池(4)自定义resolver 、balancer和picker

    golang源码分析:grpc 链接池(4)自定义resolver 、balancer和picker

    在分析完源码后golang源码分析:grpc 链接池(3)resolver 、balancer和picker,我们尝试自定义实现相应的插件。grpc 通过服务发现或者直连形式获取到 gRPC server 的实例的 endpoints,然后通知负载均衡器进行 SubConn 更新,对于新加入的 endpoint 进行实例创建,移出废弃的 endpoint, 最后通过状态更新将状态为

    日期 2023-06-12 10:48:40     
  • golang源码分析:grpc 链接池(5)自定义组件和框架交互流程

    golang源码分析:grpc 链接池(5)自定义组件和框架交互流程

    自定义grpc组件是如何与框架交互的呢?1,resolver 首先我们看下resolvergolang源码分析:grpc 链接池(4)自定义resolver 、balancer和picker相关的最核心接口,在生成resolver前我们先定义对应的builder,它对应函数Build的参数是ccresolver.ClientConn,它调用服务发现组件获取服务对应地址

    日期 2023-06-12 10:48:40     
  • golang源码分析:grpc 链接池(6)超时的设置和传递

    golang源码分析:grpc 链接池(6)超时的设置和传递

    我们经常看到下面的日志:rpc error: code = DeadlineExceeded desc = context deadline exceeded复制我们需要思考两个问题:1,这个错误码来源是哪里?2,超时是如何设置和生效的? 首先我们看下第一个问题:我们可以发现这段错误文案是golang源码里的错误文案:src/context/context.govar

    日期 2023-06-12 10:48:40     
  • golang 源码分析:json格式请求grpc服务的

    golang 源码分析:json格式请求grpc服务的

    gRPC payload 的默认格式是 Protobuf,但是 gRPC-Go 的实现中也对外暴露了 Codec interface ,它支持任意的 payload 编码。我们可以使用任何一种格式,包括你自己定义的二进制格式、flatbuffers、或者JSON 格式。 通过google.golang.org/grpc@v1.50.1/encoding/encoding.go 的

    日期 2023-06-12 10:48:40     
  • Golang gRPC学习(04): Deadlines超时限制

    Golang gRPC学习(04): Deadlines超时限制

    一、为什么要使用Deadlines# 当我们使用gRPC时,gRPC库关系的是连接,序列化,反序列化和超时执行。Deadlines 允许gRPC客户端设置自己等待多长时间来完成rpc操作,直到出现这个错误 DEADLINE_EXCEEDED。但是在正常情况下,这个DEADLINE_EXCEEDED默认设置是一个很大的数值。一些语言的API用deadline,一些用 timeout。 在

    日期 2023-06-12 10:48:40     
  • Golang gRPC中间件:拦截器链接,验证,日志记录,重试等

    Golang gRPC中间件:拦截器链接,验证,日志记录,重试等

    gRPC Go Middleware: interceptors, helpers, utilities. Middleware gRPC Go recently acquired support for Interceptors, i.e. middleware that is executed either on the gRPC Server bef

    日期 2023-06-12 10:48:40     
  • golang grpc UnaryServerInterceptor用法

    golang grpc UnaryServerInterceptor用法

    有的时候,当进行grpc调用的时候,并不希望客户端与服务端建立连接后直接就进入对应的方法体内。比如需要验证签名来确认客户端的身份,再执行相应的方法。这个时候就可以哟拿到Interceptor。   拦截器的分类 在gRPC中有两种拦截器UnaryInterceptor和StreamInterceptor,其中UnaryInterceptor拦截普通的一次请求一次响应的rpc服务,Str

    日期 2023-06-12 10:48:40     
  • Golang gRPC实践 连载一 gRPC介绍与安装

    Golang gRPC实践 连载一 gRPC介绍与安装

    gRPC介绍与安装 A high performance, open source, general RPC framework that puts mobile and HTTP/2 first. ——gRPC Website gRPC 是一个高性能、开源、通用的RPC框架,由Google推出,基于HTTP/2协议标准设计开发,默认采用Protocol Buffers数据序列化协

    日期 2023-06-12 10:48:40     
  • Golang gRPC实践 连载四 gRPC认证

    Golang gRPC实践 连载四 gRPC认证

    gRPC 默认提供了两种认证方式: 基于SSL/TLS认证方式 远程调用认证方式 两种方式可以混合使用 TLS认证示例 这里直接扩展hello项目,实现TLS认证机制 首先需要准备证书,在hello目录新建keys目录用于存放证书文件。 证书制作 制作私钥 (.key) # Key considerations for algorithm "RSA" ≥ 2048-bit opens

    日期 2023-06-12 10:48:40     
  • Golang gRPC实践 连载三 Protobuf语法

    Golang gRPC实践 连载三 Protobuf语法

    Protobuf语法 gRPC推荐使用proto3,本节只介绍常用语法,更多高级使用姿势请参考官方文档 Message定义 一个message类型定义描述了一个请求或相应的消息格式,可以包含多种类型字段。例如定义一个搜索请求的消息格式,每个请求包含查询字符串、页码、每页数目。 syntax = "proto3"; message SearchRequest { string que

    日期 2023-06-12 10:48:40     
  • Golang gRPC实践 连载七 HTTP协议转换

    Golang gRPC实践 连载七 HTTP协议转换

    gRPC HTTP协议转换 正当有这个需求的时候,就看到了这个实现姿势。源自coreos的一篇博客,转载到了grpc官方博客gRPC with REST and Open APIs。 etcd3改用grpc后为了兼容原来的api,同时要提供http/json方式的API,为了满足这个需求,要么开发两套API,要么实现一种转换机制,他们选择了后者,而我们选择跟随他们的脚步。 他们实现了一个协议转换

    日期 2023-06-12 10:48:40     
  • Golang gRPC实践 连载六 内置Trace

    Golang gRPC实践 连载六 内置Trace

    内置Trace grpc默认提供了客户端和服务端的trace日志,可惜没有提供自定义接口,当前只能查看基本的事件日志和请求日志,对于基本的请求状态查看也是很有帮助的,客户端与服务端基本一致,这里已服务端开启trace为例,修改hello项目的server代码: server/main.go package main import ( "net" "net/http"

    日期 2023-06-12 10:48:40     
  • Golang gRPC实践 连载五 拦截器 Interceptor

    Golang gRPC实践 连载五 拦截器 Interceptor

    Interceptor grpc服务端提供了interceptor功能,可以在服务端接收到请求时优先对请求中的数据做一些处理后再转交给指定的服务处理并响应,功能类似middleware,很适合在这里处理验证、日志等流程。 在自定义Token认证的示例中,认证信息是由每个服务中的方法处理并认证的,如果有大量的接口方法,这种姿势就太蛋疼了,每个接口实现都要先处理认证信息。这个时候intercepto

    日期 2023-06-12 10:48:40     
  • golang安装gRpc 报错

    golang安装gRpc 报错

    golang安装gRpc安装官方安装命令: go get google.golang.org/grpc 是安装不起的,会报: package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc"(https fetch: Get https://google.golang.org/g

    日期 2023-06-12 10:48:40     
  • grpc(3):使用 golang 开发 grpc 服务端和客户端

    grpc(3):使用 golang 开发 grpc 服务端和客户端

    golang 可以可以做grpc的服务端和客户端。 官网的文档: http://www.grpc.io/docs/quickstart/go.html https://github.com/grpc/grpc-go 和之前写的java的grpc客户端调用相同。也需要使用protobuf的配置文件。 但是golang下面的类库非常的简单,而且g golang 可以可以做grpc的服务端

    日期 2023-06-12 10:48:40