远程服务调用失败重试之简单实现
一、前言
在业务多、并发高的情况下,我们的系统,一般都会拆分为多个子系统,子系统之前通过 RPC 联系。
RPC 调用偶尔会出现失败的问题,而有些问题实际上不是问题,例如只是网络延迟,方法调用超时,再试一遍就完事了。
这时候,重试的引入即势在必行了。
二、正文
下面写一个简单的 demo,模拟远程服务重试的最简单实现方式——循环实现
1.模拟调用远程服务
重点在于引入 try catch 处理逻辑
package com.cun.retry.client;import com.cun.retry.service.RemoteService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;public class Test {private static final int RETRY_TIMES = 3;private static final Logger logger = LoggerFactory.getLogger(Test.class);public static void main(String[] args) {int retryCount = 0;while (retryCount < RETRY_TIMES) {try {RemoteService.execute();break; // 能执行到这行,说明执行没有异常} catch (Exception e) {retryCount++;logger.info("【远程服务调用失败,重试中】");}}if (retryCount >= RETRY_TIMES){logger.info("【无法调用远程服务】");}logger.info(String.format("【重试次数:%s >>> 最终执行是否成功:%s】", retryCount, retryCount < RETRY_TIMES));}}
2.模拟远程的服务方法
有几率 ÷0
引发失败
package com.cun.retry.service;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;import java.util.Random;public class RemoteService {private static final Logger logger = LoggerFactory.getLogger(RemoteService.class);public static int execute() {logger.info("【远程服务执行中】");int num = new Random().nextInt(3);return 10 / num;}}
可能结果
完整代码放在 GitHub 上了:https://github.com/larger5/retry
三、结尾
实际业务中,我们会把调用失败的操作暂存起来,等其他业务过一遍后。再重复执行,以确保大量的其他业务完成,而不至于卡在一个点上。
远程服务调用失败重试之简单实现相关推荐
- 外部接口调用失败重试
文章目录 @[toc] 第三方接口调用失败重试 规则 代码 `@MyRetry` `MyRetryFactory` `MyRetryTemplate` `ResponseResult` `ThirdC ...
- 接口调用失败重试方案
目录 背景 思路 定义一个自定义注解 定义一个切面 测试 控制台结果 背景 在项目开发中,有时候会出现接口调用失败,本身调用又是异步的,如果是因为一些网络问题请求超时,总想可以重试几次把任务处理掉. ...
- 【Spring Cloud】OpenFeign和Spring Cloud Loadbalancer调用失败后的重试机制比较
1 概述 搭建一个微服务系统,有两个服务,Client和Server,Server有三个实例A.B.C,我让Client调用Server,Loadbalancer负载分担默认采用轮询机制,当Serve ...
- pb9调用http发短信post_远程服务调用
远程服务调用,是不是API的另一个说法? 远程调用(RPC,Remote Procedure Call):远程过程调用,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的思想. R ...
- foxmail邮件加载失败重试_java retry(重试) spring retry, guava retrying 详解
系列说明 java retry 的一步步实现机制. java-retry 源码地址 情景导入 简单的需求 产品经理:实现一个按条件,查询用户信息的服务. 小明:好的.没问题. 代码 UserServi ...
- 设置失败重新发起_微服务架构下请求调用失败了怎么办!
微服务架构相比单体架构,服务的调用从同一台机器内部的本地调用变成了不同机器之间的远程方法调用,但是这个过程也引入了两个不确定的因素: - 调用的执行是在服务提供者一端,即使服务消费者本身是正常的,服务 ...
- 苏宁的RPC远程服务调用框架RSF
苏宁的RPC远程服务调用框架RSF 苏宁的系统间交互最初使用中心化 ESB 架构,但随着系统拆分工作的展开及业务量的迅速攀升,系统间调用规模越来越大,ESB 中心化架构带来的诸如中心资源隔离.中心容量 ...
- org.apache.dubbo 2.7.7 服务端处理请求及时间轮(失败重试)
本文主要针对 dubbo-spring-boot-starter 2.7.7版本, 对应的 org.apache.dubbo 2.7.7 版本的源码. 本文主要从以下几个点来分析: 服务端处理请求 ...
- 微服务调用失败的一种解决方案
一.简介 今天微服务和远程调用已经使用的很广泛了,可以解决我们很多的问题,不过由于远程调用不可控因素更多,失败的可能性更大,但是一些接口可能需要很高的要求,需要每一次调用都需要成功.比如订单流转.调用 ...
最新文章
- 使用Python+OpenCV+yolov5实现行人目标检测
- 【 FPGA 】按键消抖与LED灯流动小实验
- 漫谈中国自主杀毒引擎
- 滑动窗口算法应用及详解
- 语言结构体在内存的分布_结构体内存对齐,这篇文章给你彻底搞会!(干货收藏)...
- java并发编程之美-阅读记录4
- Spring和JSF集成:异常处理
- 黄聪:Discuz自制模板带jquery时与discuz本身冲突解决办法
- 前端使用 geetest 行为验证 web-部署教程
- 安卓命令和linux命令行,scrcpy:用电脑显示和控制Android设备的命令行工具
- linux kill全部进程,linux进程管理及kill命令详解
- 习惯三:要事第一--自我管理的原则
- MSSQL_8 操作结果集
- 【VSCode】设置代码格式化插件Beautify
- python是微软开发的吗_Python是如何在微软发展壮大的
- 如何使用docker容器中的redis
- 微信小程序 php 手机授权登录
- 【自制】WS2812光立方
- 【ClickHouse】<Error> Application: Caught exception while loading metadata: Code: 231. DB::Exception
- 2020外地人如何把户口迁入广州