使用spring-凯发k8国际

`
hbxflihua
  • 浏览: 653435 次
  • 性别:
  • 来自: 杭州
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 0)
    • ( 0)
    • ( 1)
    存档分类
    最新评论

    使用spring-retry实现支付系统异步通知

    支付系统异步通知承接上文:

    本篇介绍通过spring-retry来实现支付系统异步通知功能。

     

    1、添加所需的jar

    
    	org.springframework.retry
    	spring-retry
    	1.1.2.release
    

     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 parammap = new hashmap();
    		parammap.put("reqdata", msg.getreqdata());
    		string httpresult = null;
    		try {
    			httpresult = httpsutil.getinstance().dopostretstring(msg.get, 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) {
    		}		
    	}
    }
    

     

    分享到:
    |
    评论
    2 楼 hbxflihua 2019-01-19  
    ivi13 写道
    这种方式会有个问题,假如有个商户的交易量特别大,通知全部失败,一段时间内线程数会猛增,会导致系统问题吧

    这个问题提的好。通知全部失败还不是最坏的,回调接口地址失效完全可以在方法调用前做一层校验。另外,通知类操作可以独立出一个服务来,即使线程数暴增,也不会影响到其他的业务。最坏的情况其实是回调接口大量失败,这种你做前置校验的意义已经不大了。
    1 楼 ivi13 2018-11-20  
    这种方式会有个问题,假如有个商户的交易量特别大,通知全部失败,一段时间内线程数会猛增,会导致系统问题吧

    相关推荐

      压缩包包含着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,模拟了异常的场景异常调用...

      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 四个包 之前的资源不好意思传错了一个

      node-retry, 失败操作的指数和自定义重试策略的抽象 重试失败操作的指数和...安装npm install retry当前状态这个 module 已经测试过了,可以使用了。教程下面的示例将使用指数退避策略重试一个可能失败的dns.resolve

    global site tag (gtag.js) - google analytics
    网站地图