客户端重试机制
2025/6/22大约 1 分钟
客户端重试机制
概述
客户端重试保证了系统可靠性。在RGPC调用过程中因为网络延迟或者抖动,可能操作客户端暂时连接不上服务端的情况。如果出现了此类情况的话,那么可以让client重试连接。尽可能的避免因为网络问题影响通信,从而保证系统的可靠性。
实现
服务端
服务端无需做任何改变
客户端
在项目resource添加一个gRPC配置文件 xx.json
{
"methodConfig": [
{
"name": [
{
"service": "com.heluox.HelloService", // 服务的名字 包名 package
"method": "hello" // 服务方法名字
}
],
"retryPolicy": {
"maxAttempts": "5", // 重试的次数
"initialBackoff": "0.5s", // 初始重试的延迟时间
"maxBackoff": "30s", // 最大重试的延迟时间
"backoffMultiplier": "2", // 退避指数 每一次重试的时间间隔,不是不固定,2 4 6...
"retryableStatusCodes": [ // 只有当接受到了这个数组中描述的异常,才会发起重试
"UNAVAILABLE"
]
}
}
]
}设置重试
ManagedChannel managedChannel = ManagedChannelBuilder.forAddress("localhost", 9000)
.usePlaintext()
// 这里的serviceConfig就是上面json文件解析出来的Map<String,?>对象
.defaultServiceConfig(serviceConfig) //设置重试的参数
.enableRetry() //打开重试
.build();