Java gRPC客户端如何为每个重试请求设置单次请求超时?
Java gRPC客户端重试请求超时配置
要给每一次重试请求单独设置超时时间,你需要在服务配置的重试策略中添加perAttemptTimeout参数,这个参数专门用于控制单次重试尝试的超时时长。
具体配置方式
你当前是通过defaultServiceConfig(this.getRetryConfig())传入重试配置,所以需要在getRetryConfig()返回的JSON结构里,给retryPolicy添加perAttemptTimeout字段,值为带单位的字符串(比如"2000ms"表示2秒)。
示例配置如下:
{ "methodConfig": [ { "name": [{}], // 匹配所有服务方法,也可以指定特定方法 "retryPolicy": { "maxAttempts": 3, "initialBackoff": "100ms", "maxBackoff": "500ms", "backoffMultiplier": 2.0, "retryableStatusCodes": ["UNAVAILABLE", "DEADLINE_EXCEEDED"], "perAttemptTimeout": "2000ms" // 单次重试请求的超时时间 } } ] }
注意事项
- 这个
perAttemptTimeout是单次重试尝试的超时,和你通过存根设置的全局总超时(比如stub.withDeadlineAfter(10, TimeUnit.SECONDS))是独立生效的:单次尝试超时后会触发重试,直到达到总超时时间或者maxAttempts上限。 - 单位支持
ns(纳秒)、us(微秒)、ms(毫秒)、s(秒)、m(分钟)等,必须明确指定单位。
内容的提问来源于stack exchange,提问作者yashjain12yj
相关产品推荐
相关产品推荐

