支付系统异步通知承接上文:DelayQueue实现支付系统异步通知
本篇介绍通过spring-retry来实现支付系统异步通知功能。
1、添加所需的jar
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> <version>1.1.2.RELEASE</version> </dependency>
2、实现任务重试服务
package com.huatech.service; import java.io.IOException; import java.net.URISyntaxException; import java.util.HashMap; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.retry.RetryException; import org.springframework.retry.annotation.Backoff; import org.springframework.retry.annotation.EnableRetry; import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; import com.huatech.common.delay.RetMessage; import com.huatech.common.util.HttpsUtil; /** * 任务重试服务 * * 第一次成功则不再重试; * 第一次失败,10分钟后重试第二次; * 第二次失败,20分钟后重试第三次; * 第三次失败,40分钟后重试第四次; * 第四次失败,60分钟后重试第五次; * @author lh * */ //@Configuration @EnableRetry @Service public class TaskRetryService { private static final Logger LOGGER = LoggerFactory.getLogger(TaskRetryService.class); //返回结果 private static final String RES_SUCCESS = "success"; //时间单位:10min private static final long TIME_UNIT = 1000 * 60 * 10; //重试次数 private static final int MAX_ATTEMPTS = 5; @Retryable(value = {RetryException.class, RuntimeException.class}, maxAttempts = MAX_ATTEMPTS, backoff = @Backoff(delay = TIME_UNIT, maxDelay=TIME_UNIT * 6, multiplier= 2 )) public void notice(RetMessage msg){ HashMap<String, String> paramMap = new HashMap<String, String>(); paramMap.put("reqData", msg.getReqData()); String httpResult = null; try { httpResult = HttpsUtil.getInstance().doPostRetString(msg.getUrl(), null, paramMap); LOGGER.info("第{}次异步回调,返回结果{},返回参数:{},响应结果:{}", msg.getTimes(), httpResult, paramMap.get("reqData"), RES_SUCCESS.equals(httpResult)); if (!RES_SUCCESS.equals(httpResult)) { msg.setTimes(msg.getTimes() + 1); msg.setSuccess(false); throw new RetryException("retry failed"); }else{ msg.setSuccess(true); } } catch (URISyntaxException | IOException e) { } } }
相关推荐
压缩包包含着springboot项目retry,项目中演示了使用spring-retry传统的方式以及注解的方式使用重试的案例,也有guava-retry的使用案例,以及两者的区别
spring-amqp,spring-retry,spring-rabbit
spring-retry jar
适用于支付回调,多系统之间(需要自定义重试的场景)
Spring重试 使用spring-retry项目的例子
此项目为spring提供声明性重试支持。
Spring-retry 1.1.4重试功能.rar
spring-retry-1.0.0.RELEASE.jar
主要介绍了spring-retry简单使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
目前有两个开源的类库spring retry and guava retry都支持编程式,spring retry更加融合spring的aop注解驱动,使用更加的方便。模拟异常场景为了实现demo,模拟了异常的场景异常调用...
Spring-Retry的使用非常直观。首先,你需要在项目中添加Spring-Retry的依赖。然后,你可以通过在需要重试的方法上添加`@Retryable`注解来声明这个方法在失败时应该被重试。你还可以指定重试的策略,比如最大重试次数...
15\spring-retry-1.1.2.RELEASE.jar 16\spring-test-4.3.0.RELEASE.jar 17\spring-tx-4.3.0.RELEASE.jar 18\spring-web-4.3.0.RELEASE.jar 19\spring-webmvc-4.3.0.RELEASE.jar 20\spring-websocket-4.3.0.RELEASE....
前端开源库-superagent-retry超级代理重试,超级代理请求的重试层
弹簧重试spring 重试模板示例
Spring提供的声明式的重试类库。示例代码:@Configuration @EnableRetry public class Application { @Bean public Service service() { return new Service(); } } @Service class Service { ...
前端开源库-axios-retryAXIOS RETRY是一个AXIOS插件,它拦截失败的请求,并在可能的时候重试。
主要介绍了Spring boot使用spring retry重试机制的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
和Guava Retry、Spring Retry相比,Smart Retry最大的特点是异步重试,支持持久化,系统重启之后可以继续重试。背景在微服务环境下,会根据不同的业务将拆分成不同的服务,比如会员服务、订单服务、商品服务等等,每...
bluebird-retry, retrying bluebird promise的实用工具 蓝鸟重试 这个非常简单的库提供了一个函数来重新尝试异步操作,直到它成功。 一个"异步操作"由一个返回承诺或者同步返回的函数来体现。它支持定期间隔和指数...
spring-rabbit-1.5.1.RELEASE.jar, spring-amqp-1.5.1.RELEASE.jar, rabbitmq-client.jar spring-retry-1.1.2.RELEASE.jar 四个包 之前的资源不好意思传错了一个