gRPC调用中如何有效处理请求超时及异常情况?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2059个文字,预计阅读时间需要9分钟。
1. 在HTTP请求中,若请求超时,我们发送请求的时间,可以设置一个请求超时时间——connectTimeout,即在指定的时间内,如果请求未到达服务端,则避免客户端不必要的等待,直接响应。
1. 请求超时
在 HTTP 请求中,我们发送请求的时候,可以设置一个请求超时时间-connectTimeout,即在指定的时间内,如果请求没有到达服务端,为了避免客户端一直进行不必要的等待,就会抛出一个请求超时异常。
但是在微服务系统中,我们却很少设置请求超时时间,一般都是用另外一个概念代替,那就是请求截止时间。
这是什么原因呢?今天我们就来简单聊一聊这个话题。
在微服务中我们客户端的请求在服务端往往会有比较复杂的链条,我想起来 Spring Cloud Sleuth 官方给的一个请求链路追踪的图,我们直接拿来看下:
这张图中,请求从客户端发起之后,在服务端一共经历了四个 SERVICE,对于这样的请求,如果我们还是按照之前发送普通 HTTP 请求的方式,设置一个 connectTimeout 显然是不够的。
本文共计2059个文字,预计阅读时间需要9分钟。
1. 在HTTP请求中,若请求超时,我们发送请求的时间,可以设置一个请求超时时间——connectTimeout,即在指定的时间内,如果请求未到达服务端,则避免客户端不必要的等待,直接响应。
1. 请求超时
在 HTTP 请求中,我们发送请求的时候,可以设置一个请求超时时间-connectTimeout,即在指定的时间内,如果请求没有到达服务端,为了避免客户端一直进行不必要的等待,就会抛出一个请求超时异常。
但是在微服务系统中,我们却很少设置请求超时时间,一般都是用另外一个概念代替,那就是请求截止时间。
这是什么原因呢?今天我们就来简单聊一聊这个话题。
在微服务中我们客户端的请求在服务端往往会有比较复杂的链条,我想起来 Spring Cloud Sleuth 官方给的一个请求链路追踪的图,我们直接拿来看下:
这张图中,请求从客户端发起之后,在服务端一共经历了四个 SERVICE,对于这样的请求,如果我们还是按照之前发送普通 HTTP 请求的方式,设置一个 connectTimeout 显然是不够的。

