我应该如何在 GRPC 调用中实现超时?

ani*_*tar 4 go grpc

我使用此代码连接到 grpc 服务器,并且clientConn对象用于所有后续的 rpc 调用。maxDelay设置为 5 秒。现在由于服务器上的一些问题,它没有响应 grpc 调用。所以我的客户每次rpc调用都等待很长时间。我需要以不同的方式设置超时吗?

b := grpc.BackoffConfig{
        MaxDelay: maxDelay,
}

clientConn, err := grpc.Dial(serverAddress, grpc.WithBackoffConfig(b), grpc.WithInsecure())

if err != nil {
        log.Println("Dial failed!")
        return err
}
Run Code Online (Sandbox Code Playgroud)

Kit*_*oon 8

您可以修改代码以添加超时,使用grpc.WithTimeout(5 * time.Second)而不是使用MaxDelayandgrpc.WithBackoffConfig(b)来重试和重试延迟。

clientConn, err := grpc.Dial(serverAddress, grpc.WithTimeout(5 * time.Second), grpc.WithInsecure())
if err != nil {
        log.Println("Dial failed!")
        return err
}
Run Code Online (Sandbox Code Playgroud)

然而,上面的内容已被弃用,或者您可以使用DialContextcontext.WithTimeout

ctx, _ := context.WithTimeout(context.Background(), 5*time.Second)

clientConn, err := grpc.DialContext(ctx, serverAddress, grpc.WithInsecure())
if err != nil {
    log.Println("Dial failed!")
    return err
}
Run Code Online (Sandbox Code Playgroud)