JMicro微服务之超时&重试

超时&重试
客户端调用服务时,由于网络抖动,服务故障等原因,不能及时响应给客户端,往往需要重试一两次才能成功,而不应该在发生超时时就直接给调用者失败结果,这样不友好,往往让用户怀疑我们服务的稳定性和可用性。

比如平时访问某个网站,页面出现长时间读条加载的情况,我们往往按一下刷新按钮就能很快成功打开页面。在微服务调用中,往往由服务调用者在收到失败响应后,根据业务场景发起合理的重试请求。JMicro在框架级别提供这种配置并且由平台自动做重试操作,提高服务调用的成功率。

JMicro超时重试配置

在前面JMicro微服务Helloworld基基础上,通过配置SMethod注解属性达到超时重试的目的。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Component
@Service(version=“0.0.1”)
public class TxShopServiceImpl implements ITxShopService {

private final static Logger logger = LoggerFactory.getLogger(TxShopServiceImpl.class);
 
private Random ran = new Random(System.currentTimeMillis());
 
@Override
@SMethod(timeout=1000,retryCnt=3,retryInterval=100)
public Resp<Boolean> buy(int goodId,int num) {
    Resp<Boolean> r = new Resp<>(Resp.CODE_SUCCESS,true);
    int st = ran.nextInt(6);
    if(st > 0) {
        logger.info("Sleep time: " + st+" Seconds idx: " +num);
        try {
            TimeUnit.SECONDS.sleep(30);//睡30秒,让客户端超时并重试,只要为了验证超时重试逻辑
            TimeUnit.SECONDS.sleep(ran.nextInt(5));//睡30秒,随机睡0到5秒,测试并发表求时部份请求超时
        } catch (InterruptedException e) {
            logger.error("",e);
        }
    }
    logger.info("Success return idx:" +num);
    return r;
}

}

在buy服务方法配置SMethod注解,并设置timeout,retryInterval,retryCnt三个属性即可。

timeout:表示超时时间,单位毫秒,小于或等于0表示不启用超时,大于0表示启用超时;

retryInterval:表示超时后,重试间隔,单位毫秒,如果服务超时后,立即发起重试请求,很可能还是失败,所以要稍微等一会,让服务方缓存一下,再发起重试,往往成功率会更高。

retryCnt:表示重试次数,不包括第一次,如设置为3,如果第一次超时,第2次成功,则总共请求了2次,同理,全部超时时,总共请求了4次,4次超时后,RPC失败,抛出TimeoutException异常。

配置启动参数及入口类**
**USB Microphone https://www.soft-voice.com/
Wooden Speakers https://www.zeshuiplatform.com/
亚马逊测评 www.yisuping.cn
深圳网站建设www.sz886.com

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值