Spi扩展点
# 【监听器】 EasyRetryListener
完整代码:
# 实现接口EasyRetryListener
@Slf4j
public class MyEasyRetryListener implements EasyRetryListener {
@Override
public void beforeRetry(final String sceneName, final String executorClassName, final Object[] params) {
log.info("------> beforeRetry sceneName:[{}] executorClassName:[{}] params:[{}]",
sceneName, executorClassName, JsonUtil.toJsonString(params));
}
@Override
public void successOnRetry(final Object result, final String sceneName, final String executorClassName) {
log.info("------> successOnRetry sceneName:[{}] executorClassName:[{}] result:[{}]",
sceneName, executorClassName, JsonUtil.toJsonString(result));
}
@Override
public void failureOnRetry(final String sceneName, final String executorClassName, final Throwable e) {
log.info("------> failureOnRetry sceneName:[{}] executorClassName:[{}]", sceneName, executorClassName, e);
}
}
# 注册MyEasyRetryListener
执行的顺序按照文件中的每行的先后顺序
- 添加目录META-INFO/services
- 添加文件com.aizuda.easy.retry.client.core.event.EasyRetryListener
- 在上述文件新增一行记录为com.maluxinyu.easyretry.spi.MyEasyRetryListener
# 【参数序列】 RetryArgSerializer
完整代码:
# 实现接口RetryArgSerializer
参考HessianSerializer
# 注册RetryArgSerializer
若存在多条记录则取第一条
- 添加目录META-INFO/services
- 添加文件com.aizuda.easy.retry.client.core.RetryArgSerializer
- 在上述文件新增一行记录为com.aizuda.easy.retry.client.core.serializer.HessianSerializer
# 【重试现场记录器】 RetryArgSerializer
完整代码:
# 实现接口RetrySiteSnapshotContext
public class TTLRetrySiteSnapshotContext<T> implements RetrySiteSnapshotContext<T> {
private final ThreadLocal<T> threadLocal;
public TTLRetrySiteSnapshotContext() {
this.threadLocal = new TransmittableThreadLocal<>();
}
@Override
public void set(final T value) {
threadLocal.set(value);
}
@Override
public void remove() {
threadLocal.remove();
}
@Override
public T get() {
return threadLocal.get();
}
}
# 注册RetrySiteSnapshotContext
若存在多条记录则取第一条
- 添加目录META-INFO/services
- 添加文件com.aizuda.easy.retry.client.core.RetrySiteSnapshotContext
- 在上述文件新增一行记录为com.maluxinyu.easyretry.spi.TTLRetrySiteSnapshotContext
# 【表达式解析器】生成BizNo表达式
目前系统内置了
1.【Aviator表达式】AviatorExpressionEngine
2.【Spel表达式解析引擎】 SpELExpressionEngine
3.【QL表达式解析器】QLExpressEngine
若存在多条记录则取第一条
# 注册表达式解析器
- 添加目录META-INFO/services
- 添加文件com.aizuda.easy.retry.client.core.ExpressionEngine
- 在上述文件新增一行记录为com.aizuda.easy.retry.client.core.expression.AviatorExpressionEngine
- 添加对应的maven
<dependency>
<groupId>com.googlecode.aviator</groupId>
<artifactId>aviator</artifactId>
<version>5.3.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>QLExpress</artifactId>
<version>3.3.1</version>
</dependency>
上次更新: 2024/04/07, 10:27:31