Retryable注解
🌈特别说明
通过HelloWorld这个最简单的案例,我们可以看到Retryable注解就是SnailJob中最重要的入口,那么接下来我们就要看一下这个注解中定义了哪些属性, 又给了我们哪些可以配置的选项呢?
源码地址: snail-job-demo
Retryable注解全貌
参数 | 描述 | 默认值 | 必须指定 |
---|---|---|---|
scene | 场景 | 无 | ✅ |
include | 包含的异常 | 无 | ❌ |
exclude | 排除的异常 | 无 | ❌ |
retryStrategy | 重试策略 | LOCAL_REMOTE | ✅ |
retryMethod | 重试处理入口 | RetryAnnotationMethod | ✅ |
idempotentId | 幂等id生成器 | SimpleIdempotentIdGenerate | ✅ |
retryCompleteCallback | 服务端重试完成(重试成功、重试到达最大次数)回调客户端 | SimpleRetryCompleteCallback | ❌ |
isThrowException | 本地重试完成后是否抛出异常 | true | ❌ |
bizNo | 标识具有业务特点的值比如订单号、物流编号等,可以根据具体的业务场景生成,具体的生产规则参考:Spi扩展点 | 无 | ❌ |
localTimes | 本地重试次数 次数必须大于等于1 | 3 | ✅ |
localInterval | 本地重试间隔时间(s) | 2 | ✅ |
timeout | 同步(async:false)上报数据需要配置超时时间 | 60 * 1000 | ❌ |
unit | 超时时间单位 | TimeUnit.MILLISECONDS | ❌ |
forceReport | 是否强制上报数据到服务端 | false | ❌ |
async | 是否异步上报数据到服务端 | true | ❌ |
propagation | REQUIRED: 当设置为REQUIRED时,如果当前重试存在,就加入到当前重试中,即外部入口触发重试 如果当前重试不存在,就创建一个新的重试任务。 REQUIRES_NEW:当设置为REQUIRES_NEW时, 无论当前重试任务是否存在,都会一个新的重试任务。 | REQUIRED | ✅ |
methodResult(since:1.6.0-beta1) | 当isThrowException=false时,允许用户返回一个自定义值,注意: 1. 基于异常重试时生效 2. 若自定义返回值类型与方法的返回值不同时返回NULL | NULL | ❌ |
retryIfResult(since:1.6.0-beta1) | 当方法正常返回结果时,允许用户针对返回结果判断是否需要开启重试 | false | ❌ |
可以看到我们能够自定义的参数还是很多的,那么接下来我将用分组的形式来跟大家讲解这些参数。