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 | ❌ |
可以看到我们能够自定义的参数还是很多的,那么接下来我将用分组的形式来跟大家讲解这些参数。