支付系统异步通知承接上文: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) { } } }
相关推荐
标题中的"spring-amqp"、"spring-retry"和"spring-rabbit"是Spring框架的三个关键组件,它们主要用于构建高效、可靠的分布式系统,尤其是在消息传递和错误处理方面。 1. **Spring AMQP**: Spring AMQP是Spring框架...
本文将详细阐述Spring-retry 1.1.4的重试功能及其核心概念、配置和使用方法。 一、核心概念 1. **RetryTemplate**:这是Spring-retry的核心类,用于定义和执行重试逻辑。通过这个模板,我们可以设置重试策略、回退...
目前有两个开源的类库spring retry and guava retry都支持编程式,spring retry更加融合spring的aop注解驱动,使用更加的方便。模拟异常场景为了实现demo,模拟了异常的场景异常调用...
和Guava Retry、Spring Retry相比,Smart Retry最大的特点是异步重试,支持持久化,系统重启之后可以继续重试。背景在微服务环境下,会根据不同的业务将拆分成不同的服务,比如会员服务、订单服务、商品服务等等,每...
RabbitMQ是一个开源的消息代理和队列服务器,它基于AMQP(Advanced Message Queuing Protocol)协议,被广泛用于分布式系统中的异步任务处理、解耦和扩展性提升。在这个主题中,我们将深入探讨与Java开发相关的...
Spring Retry提供了一种声明式的方式来重试这些操作,增加了系统的健壮性。 整合Spring与RabbitMQ的步骤通常包括以下部分: 1. **配置连接**:首先,我们需要在Spring的配置文件中设置RabbitMQ的相关属性,如...
使用Spring-rabbit,开发者可以轻松地在Spring应用中发送和接收消息,实现消息驱动的架构。它包括了模板(Template)用于发送消息,以及监听器容器(Listener Container)来处理接收的消息。此外,Spring-rabbit还...
本存储库`springboot-rabbitmq-retry-queues`主要关注的是如何在Spring Boot应用中实现RabbitMQ的非阻塞重试队列解决方案,这是一个针对处理消息处理失败时的策略,可以避免因单个任务失败而导致整个系统的阻塞。...
将 Spring Boot 与 RabbitMQ 结合,可以有效地实现异步处理、解耦系统组件,提高系统的可扩展性和可靠性。 1. **配置 RabbitMQ** 在 Spring Boot 项目中集成 RabbitMQ 首先需要在 `application.properties` 或 `...
展示如何将apache ignite与spring boot集成在一起,以及使用持久性内存功能和sql查询来覆盖内存缓存中的ign的案例 将Spring Boot与Apache Ignite集成 如何启用和使用Apache Ignite的持久性持久内存功能,该功能可以...
- **Retry机制**:通过配置RabbitTemplate,可以实现消息的重试策略,提高系统稳定性。 - **Transactions and Acknowledgments**:Spring AMQP支持事务和手动确认模式,确保消息的可靠传输。 4. **实战应用** - ...
通过使用Spring Integration,开发者可以将批处理作业与消息队列、服务调用等集成,从而实现作业与其他系统的交互。 知识点十:监控和测试 为了能够监控和调试批处理作业,Spring Batch提供了丰富的日志记录和监控...
- **实时处理与异步处理**:虽然不是主要设计目的,但在某些场景下也可以实现类似的功能。 ##### 1.3 架构概览 Spring Batch 的核心架构包括以下几个组件: - **Job**:定义了批处理任务的整体逻辑。 - **Step**...
### Spring Boot 集成 RabbitMQ 实践指南 #### 一、RabbitMQ 环境搭建 在深入了解 Spring Boot 如何与 RabbitMQ 集成...通过这些配置,开发者可以轻松地实现异步处理、任务分发等功能,提高系统的整体性能和稳定性。
当我们谈论"SpringBoot整合stream使用rabbitmq作为消息中间件"时,我们涉及的关键技术点主要包括Spring Boot的Stream模块、RabbitMQ的使用以及它们如何协同工作来实现高效的微服务通信。 Spring Boot Stream模块是...
- 服务容错:Failsafe、Failsfast、Fallback、Retry、Mock等策略,帮助系统应对服务失败。 3. Spring全家桶: - Spring Framework:核心容器,提供了依赖注入(DI)和面向切面编程(AOP)。 - Spring MVC:用于...
在使用 RabbitMQ 时,需要注意的一点是,消息的发送和接收是异步的,需要异步处理消息。另外,RabbitMQ 也提供了很多高级特性,如消息确认、消息 retry 等,可以根据需要选择使用。 Spring Boot 整合 RabbitMQ 可以...
- **与Spring集成良好:**MyBatis可以轻松地与Spring框架集成,实现事务管理等功能。 **3. MyBatis框架的缺点:** - **SQL管理分散:**MyBatis的SQL语句是放在XML映射文件中的,这可能导致SQL管理和维护变得复杂。...
- 在服务提供者的Spring配置文件(如`beans.xml`)中,使用`<dubbo:service>`标签定义服务,指定接口、实现类以及其它属性,如版本、协议、分组等。 5. **注册中心配置** - Dubbo支持多种注册中心,如Zookeeper、...
5. **异常处理和熔断机制**:理解Dubbo的容错机制,如Failsafe、Fallback、Retry等,以及如何在服务之间实现Hystrix或Sentinel的熔断保护。 6. **服务监控**:学习如何使用Dubbo自带的监控中心,或者集成其他监控...