登录
首页 >  Golang >  Go问答

如何在 GRPC 请求中设置超时时间?

来源:stackoverflow

时间:2024-03-03 19:30:26 267浏览 收藏

学习知识要善于思考,思考,再思考!今天golang学习网小编就给大家带来《如何在 GRPC 请求中设置超时时间?》,以下内容主要包含等知识点,如果你正在学习或准备学习Golang,就都不要错过本文啦~让我们一起来看看吧,能帮助到你就更好了!

问题内容

我使用此代码连接到 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
}

解决方案


您可以修改代码以使用 grpc.withtimeout(5 * time.second) 添加超时,而不是使用 maxdelaygrpc.withbackoffconfig(b) (用于重试和重试延迟)。

clientconn, err := grpc.dial(serveraddress, grpc.withtimeout(5 * time.second), grpc.withinsecure())
if err != nil {
        log.println("dial failed!")
        return err
}

但是,上述内容已被弃用,您也可以使用 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
}

withtimeout 的文档说它用于设置连接初始化的超时,而不是设置调用的超时。 dialcontext 中的上下文是相同的。

要设置调用超时,您可以将 context 传递给 invoke,如下所示:

ctx, cancel := context.WithDeadline(ctx, time.Now().Add(time.Duration(2000)*time.Millisecond))
defer cancel()
clientConn.Invoke(ctx, "/YourEndpoint", in, out, opts...)

到这里,我们也就讲完了《如何在 GRPC 请求中设置超时时间?》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注golang学习网公众号,带你了解更多关于的知识点!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>