微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

gRPC的Go语言实现

gRPC-Go

gRPC的Go实现:一个性能、开源、通用的RPC框架,将移动和HTTP/2放在首位。有关更多信息,请参阅Go gRPC文档,或直接进入快速入门。

Prerequisites

  • Go:三个最新的主要版本中的任何一个

Installation

使用Go模块支持(Go1.11+)),只需添加以下导入

import "google.golang.org/grpc"

,然后go [build|run|test]自动获取所需的依赖项。

否则,要安装grpc-go包,请运行以下命令:

$ go get -u google.golang.org/grpc

注意:如果您试图从中国访问grpc-go,请参阅下面的常见问题解答。

Learn more

FAQ

I/O Timeout Errors

golang.org域可能被某些国家阻止。go get发生这种情况时,通常会产生如下错误

$ go get -u google.golang.org/grpc
package google.golang.org/grpc: unrecognized import path "google.golang.org/grpc" (https fetch: Get https://google.golang.org/grpc?go-get=1: dial tcp 216.239.37.1:443: I/O timeout)

要构建Go代码,有几个选项:

  • 设置一个VPN并通过它访问google.golang.org。
  • 没有Go模块支持git clone手动回购:git clone https://github.com/grpc/grpc-go.git $GOPATH/src/google.golang.org/grpc 您需要对golang.org中的所有grpc依赖项执行相同的操作,例如golang.org/x/net
  • 有了Go模块支持:可以使用go modreplace特性为golang.org包创建别名。在项目的目录:go mod edit -replace=google.golang.org/grpc=github.com/grpc/grpc-go@latest go mod tidy go mod vendor go build -mod=vendor 中,同样需要对golang.org上托管的所有可传递依赖项执行此操作。有关详细信息,请参阅golang/go第28652期。

编译错误,未定义:grpc.SupportPackageIsversion

如果您使用的是Go模块:

确保您的gRPC-Go版本是required,在包含生成.pb.go文件的同一模块中的相应版本。例如,SupportPackageIsversion6需要v1.27.0,因此在go.mod文件中:

module <your module name>

require (
    google.golang.org/grpc v1.27.0
)

如果不使用Go模块:

更新proto包、gRPC包,并重新生成.proto文件

go get -u github.com/golang/protobuf/{proto,protoc-gen-go}
go get -u google.golang.org/grpc
protoc --go_out=plugins=grpc:. *.proto

如何打开日志记录

认记录器由环境变量控制。像这样打开所有东西:

$ export GRPC_GO_LOG_VERBOSITY_LEVEL=99
$ export GRPC_GO_LOG_SEVERITY_LEVEL=info

RPC失败,错误"code = Unavailable desc = transport is closing"

错误表示RPC正在使用的连接已关闭,可能有许多原因,包括

  1. mis-configured传输凭据,握手时连接失败
  2. 字节被中断,可能是中间的代理
  3. server shutdown
  4. Keepalive参数导致连接关闭,例如,如果您已将服务器配置为定期终止连接以触发DNS查找。如果是这种情况,您可能需要增加MaxConnectionAgeGrace,以允许更长的RPC调用完成。

调试它可能很棘手,因为错误发生在客户端,但关闭连接的根本原因在服务器端。打开客户端和服务器上的日志记录,查看是否有任何传输错误

 

转载:https://www.5axxw.com/wiki/content/yp5xgy

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐