在很多场景中,我们需要“重试”,重试意味着反复执行一段代码直至成功,或者重试多次无果后标记失败。比如MQ
发送消息失败,会采取重试手段,比如工程中使用RPC
请求外部服务,可能因为网络波动出现超时而采取重试手段等等.
MQ自身也有重试机制,但是这种机制不是很灵活,如果某些功能没有使用MQ的话,那么就不是那么方便了.
框架概览
Spring Retry 框架广泛使用于Spring Batch
,Spring Integration
,Spring for Apache Hadoop
等spring项目
如下图所示:
RetryTemplate
,重试模板,是进入spring-retry框架的整体流程入口RetryCallback
,重试回调,用户包装业务流,第一次执行和产生重试执行都会调用这个callback代码RetryPolicy
,重试策略,不同策略有不同的重试方式BackOffPolicy
,两次重试之间的回避策略,一般采用超时时间机制RecoveryCallback
,当所有重试都失败后,回调该接口,提供给业务重试回复机制RetryContext
,每次重试都会将其作为参数传入RetryCallback中使用RetryListener
,监听重试行为,主要用于监控。
示例
|
|