JMicro微服务之超时&重试

JMicro是本人开发的基于Java实现的微服务框架,当前正式版本为0.0.3,并已发布到maven中央仓库。项目源码github:
https://github.com/mynewworldyyl/jmicro,Demo源码:
https://github.com/mynewworldyyl/jmicro_demos/tree/0.0.3-release
Maven地址:
https://mvnrepository.com/search?q=cn.jmicro
Demo: 账号:test00 密码:1

超时&重试

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

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

JMicro超时重试配置

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

@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; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zygsgs.html