gpt4 book ai didi

go - 在 Go 中关闭 grpc 服务器时如何检测错误?

转载 作者:数据小太阳 更新时间:2023-10-29 03:18:25 25 4
gpt4 key购买 nike

我正在尝试在 Go gRPC 客户端代码中检测 gRPC 服务器关闭

import (
pb "mysample.com/api/rpc"
"google.golang.org/grpc"
)
var stream pb.SearchProductService_MarketStreamClient
for {
r, err := stream.Recv()
if err == io.EOF {
log.Println("Info: server close")
break
} else if err != nil {
log.Println("Err: grpc code:", grpc.Code(err))
if err != nil {
log.Fatal(err)
}
}
outs := printOrderbook(r)
fmt.Println(outs)
if outf != nil {
outf.WriteString(time.Now().Format("030405.000 ") +
outs + "\n")
}
}

输出信息是

mysample.go:122: Err: grpc code: Unavailable
panic: rpc error: code = Unavailable desc = transport is closing

我试图在 Go 的源代码和 $GOPATH/src/中搜索“transport is closing”,但找不到这样的短语。有什么聪明的方法来处理这种更深层次的错误吗?

最佳答案

gRPC 始终需要正确返回错误,如果您不处理错误,连接将进入 TRANSIENT_FAILURE 状态,并且您无法通过此客户端连接请求任何查询。正确捕获错误并使用 grpc 错误代码返回它。您可以在此处找到更深入的网站 https://www.grpc.io/docs/guides/error/并使用这个内置包 grpc:google.golang.org/grpc/status

conn *grpc.ClientConnconn.GetState() 会给出当前的连接状态

关于go - 在 Go 中关闭 grpc 服务器时如何检测错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57583346/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com