1.需求:
(1):支付成功需要给商户发送异步通知接口
(2):发送失败得情况下需要有重发机制,重发10次,如果10次还是失败,就不重发了
2.思路 :
(1):创建表,需要有时间,次数,状态,推送信息,唯一表示
(2):入库
(3):成功更新状态,失败更新状态(唯一标识)
3.技术 :
(1):TimeUnit是java.uitl.concurrent包下得一个类名,主要功能是暂停线程得操作与Thread.sleep()一样功能都是暂停线程
(2):Thread.sleep()只能精确到毫秒,只可以精确到毫秒数
//睡眠多久
(3):TimeUnit.SECONDS.sleep(intervalTime);
(4): * NANOSECONDS:毫微秒
* MICROSECONDS:微妙
* MILLISECONDS:毫秒
* SECONDS:秒
* MINUTES:分钟
* HOURS:小时
* DAYS:天
4.实现 :
public class B {
//最大重试次数 10
private static final Integer tryTimes=10;
//重时间隔单位秒
private static final Integer intervalTime = 2;
public static void main(String[] args) throws InterruptedException {
boolean b = B.retryBuss();
System.out.println("最终指向结果:"+(b ? "成功":"失败"));
}
private static boolean retryBuss() throws InterruptedException {
Integer retryNum = 1;
boolean flag = false;
while (retryNum <= tryTimes){
try {
flag = execute(retryNum);
if(flag){
System.out.println("第"+retryNum+"成功");
break;
}
System.out.println("第"+retryNum+"失败");
TimeUnit.SECONDS.sleep(intervalTime);
retryNum++;
}catch (Exception e){
retryNum++;
continue;
}
}
return flag;
}
/**
* 具体得业务逻辑
* @param retryNum
* @return
*/
private static boolean execute(int retryNum) {
Random random = new Random();
int i = random.nextInt(20);
boolean flag = true;
try {
if(i != 6 ){
flag = false;
throw new RuntimeException();
}
}catch (Exception e){
}
return flag;
}
}