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