ElasticJob监听器接口开发指南
shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/shar/shardingsphere-elasticjob
什么是ElasticJob监听器
ElasticJob提供了强大的监听器机制,允许开发者在作业执行前后插入自定义逻辑。监听器分为两种类型:常规监听器和分布式监听器,它们分别适用于不同的业务场景。
常规监听器开发
常规监听器是最基础的监听器类型,它会在每个作业节点上独立执行,不涉及分布式协调。
适用场景
- 每个节点需要独立执行的任务
- 不需要全局协调的简单操作
- 例如:清理节点本地临时文件、记录节点执行日志等
开发步骤
- 实现
ElasticJobListener
接口 - 重写
beforeJobExecuted
方法(作业执行前调用) - 重写
afterJobExecuted
方法(作业执行后调用) - 实现
getType
方法返回监听器类型标识
示例代码
public class MyJobListener implements ElasticJobListener {
@Override
public void beforeJobExecuted(ShardingContexts shardingContexts) {
// 作业执行前的逻辑
System.out.println("作业即将执行,分片信息:" + shardingContexts);
}
@Override
public void afterJobExecuted(ShardingContexts shardingContexts) {
// 作业执行后的逻辑
System.out.println("作业执行完成,分片信息:" + shardingContexts);
}
@Override
public String getType() {
return "mySimpleJobListener";
}
}
分布式监听器开发
分布式监听器是更高级的监听器类型,它确保在分布式环境下某些逻辑只由一个节点执行。
适用场景
- 需要全局只执行一次的任务
- 涉及分布式资源协调的操作
- 例如:清理共享数据库数据、发送全局通知等
开发步骤
- 继承
AbstractDistributeOnceElasticJobListener
抽象类 - 在构造函数中设置超时时间(避免死锁)
- 重写
doBeforeJobExecutedAtLastStarted
方法(最后一个节点启动前执行) - 重写
doAfterJobExecutedAtLastCompleted
方法(最后一个节点完成后执行) - 实现
getType
方法返回监听器类型标识
示例代码
public class MyDistributeOnceJobListener extends AbstractDistributeOnceElasticJobListener {
// 启动超时时间(毫秒)
private static final long startTimeoutMills = 5000;
// 完成超时时间(毫秒)
private static final long completeTimeoutMills = 10000;
public MyDistributeOnceJobListener() {
super(startTimeoutMills, completeTimeoutMills);
}
@Override
public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
// 最后一个节点启动前的逻辑
System.out.println("最后一个节点即将启动,准备执行全局前置操作");
}
@Override
public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
// 最后一个节点完成后的逻辑
System.out.println("所有节点已完成,准备执行全局后置操作");
}
@Override
public String getType() {
return "myDistributeOnceJobListener";
}
}
监听器注册方式
开发完成后,需要通过SPI机制注册监听器:
- 在项目的
resources/META-INF/services
目录下创建文件 - 文件名称为监听器接口的全限定名
- 文件内容为自定义监听器实现类的全限定名
最佳实践建议
- 常规监听器优先:如果业务场景允许,优先使用常规监听器,它更简单可靠
- 合理设置超时:分布式监听器必须设置合理的超时时间,避免死锁
- 幂等性设计:监听器中的操作应当设计为幂等的,防止重复执行导致问题
- 异常处理:监听器中应当妥善处理异常,避免影响主流程
- 性能考量:监听器中的操作应当轻量,避免影响作业执行效率
常见问题解答
Q:常规监听器和分布式监听器的主要区别是什么?
A:常规监听器在每个节点上都会独立执行,而分布式监听器确保某些逻辑在分布式环境下只由一个节点执行一次。
Q:如何选择使用哪种监听器?
A:如果需要每个节点都执行的操作(如清理本地文件),使用常规监听器;如果需要全局只执行一次的操作(如清理共享数据库),使用分布式监听器。
Q:分布式监听器的超时时间如何设置?
A:需要根据网络环境和业务处理时间合理设置,通常启动超时可以设置较短(3-5秒),完成超时根据业务处理时间适当延长。
通过本文的介绍,相信您已经掌握了ElasticJob监听器的开发方法。合理使用监听器可以大大增强作业的灵活性和可扩展性。
shardingsphere-elasticjob 项目地址: https://gitcode.com/gh_mirrors/shar/shardingsphere-elasticjob
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考