1つの弾力性のある仕事のフレームワーク
Quartzフレームワークとzooepperに基づいて開発されました。
主に、クラスター内のジョブが複数回実行され、クラスターがジョブを水平方向にスケーリングできないという問題(実行効率の問題)を解決します。機能は次のとおりです。
- 分散スケジューリング調整(zookeeperが提供)
- 柔軟な伸縮
- フェイルオーバー(ノードに障害が発生すると、他のノードがジョブの実行を引き継ぎます)
- 逃したジョブの再トリガー
- ジョブシャードの一貫性。分散環境の1つのインスタンスでのみ同じシャードが実行されるようにします(複数の実行は発生しません)。
- 豊富なジョブタイプ(シンプル、データフロー)
- Springの統合と名前空間のプロビジョニング(SpringJobScheduler)
- 運用および保守プラットフォームの提供(elastic-job-lite-console)
2.エラスティックジョブの使い方は?
最初にzookeeperを起動する必要があります。
1.依存関係を導入する
<dependency>
<groupId>com.dangdang</groupId>
<artifactId>elastic-job-lite-spring</artifactId>
<version>2.1.5</version>
</dependency>
2.ジョブクラスを作成する2つの方法:
2.1 SimpleJobインターフェースを実装するためのジョブクラスを作成する(単純なジョブタスク)
特徴:
public class MySimpleJob implements SimpleJob {
@Override
public void execute(ShardingContext shardingContext) {
int shardingItem = shardingContext.getShardingItem();//当前分片项
String jobParameter = shardingContext.getJobParameter();//当前分片自定义的参数,例如按照类型分片(txt、jpg、pdf等)
//这里可以根据分片的信息,去数据查询对应的数据,进行处理
//例如按照id奇偶数去分片。或按照类型等字段分片处理数据,提高性能
System.out.println(new Date()+":"+JSON.toJSONString(shardingContext));
}
}
2.2またはDataFlowJobインターフェースを実装する(データフロージョブタスク)
特徴:
public class MyDateFlowJob implements DataflowJob<Object> {
@Override
public List<Object> fetchData(ShardingContext shardingContext) {
//当返回有数据时,则执行下边的processData方法,一直到没有数据返回(执行完了),本次作业完毕
//等待进入下一次作业
return null;
}
@Override
public void processData(ShardingContext shardingContext, List<Object> data) {
System.out.println(new Date()+"处理数据");
}
}
3.構成クラスを作成します
すべてのステップはコードに明確に記述されています。
@Configuration
public class ElasticJobConfig {
@Bean
public SpringJobScheduler dataFlowJobScheduler(DataSource dataSource){
//1、创建zookeeper配置(zookeeper地址,命名空间)
ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration("localhost:2181", "elastic-job");
//2、创建zookeeper配置中心,并初始化(根据zookeeper配置创建)
ZookeeperRegistryCenter zookeeperRegistryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);
zookeeperRegistryCenter.init();
//3、创建作业配置(作业名称、cron表达式、分片数量)
JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder("myDataflowJob", "0/30 * * * * ?", 5)
.jobParameter("this jobParameter")//作业参数
.description("这个作业是干什么的?描述一下")//作业描述
.failover(true)//开始失效转移。当某节点挂掉之后,作业会分配到其他节点继续完成
.shardingItemParameters("0=txt,1=jpg,2=pdf,3=word,4=excel")//分片附带的参数
.build();
//4、创建数据流作业配置(根据作业配置、实现了DataflowJob实现类的全限定名、是否流式处理创建)
DataflowJobConfiguration dataflowJobConfiguration = new DataflowJobConfiguration(jobCoreConfiguration, MyDateFlowJob.class.getCanonicalName(),true);
//5、创建精简版作业配置(根据简单作业配置创建)
LiteJobConfiguration liteJobConfiguration = LiteJobConfiguration.newBuilder(dataflowJobConfiguration)
.jobShardingStrategyClass("com.dangdang.ddframe.job.lite.api.strategy.impl.RotateServerByNameJobShardingStrategy")//配置作业分片策略类
//默认elastic-job提供了三种分片策略:
//1、AverageAllocationJobShardingStrategy 平均分配策略(默认)
//2、OdevitySortByNameJobShardingStrategy 根据作业名hash值奇偶数升降ip分配策略
//3、RotateServerByNameJobShardingStrategy 根据作业名hash值对服务器列表轮转分配策略
//你还可以自定义分配策略实现JobShardingStrategy接口
.overwrite(true)//覆盖注册中心配置。如果不覆盖,一次注册后,配置便再也不能改变了。
.monitorPort(8889)//作业辅助监控端口。当生产环境不能连接作业监控时,可通过此端口导出日志查看。
.build();
//6、创建作业事件配置(可选)(根据数据源创建)
//作用:把作业的执行过程写入数据库表中
JobEventConfiguration jobEventConfiguration = new JobEventRdbConfiguration(dataSource);
//7、创建Elastic监听器(可选)
//作用:可以在作业执行的前后做某些操作
MyDistributeOnceElasticJobListener listener = new MyDistributeOnceElasticJobListener(0,0);
//8、创建spring作业定时器,并初始化(根据作业类的实例、zookeeper注册中心、精简版作业配置、[作业事件配置]、[elastic监听器])
//作用:正式创建作业
SpringJobScheduler springJobScheduler = new SpringJobScheduler(new MyDateFlowJob(), zookeeperRegistryCenter, liteJobConfiguration, jobEventConfiguration, listener);
springJobScheduler.init();
return springJobScheduler;
}
}
4. Elastic-jobリスナーを構成します(リスナーのメソッドは、ジョブが実行されるたびに呼び出されます)(オプション)
public class MyDistributeOnceElasticJobListener extends AbstractDistributeOnceElasticJobListener {
public MyDistributeOnceElasticJobListener(long startedTimeoutMilliseconds, long completedTimeoutMilliseconds) {
super(startedTimeoutMilliseconds, completedTimeoutMilliseconds);
}
@Override
public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
System.out.println("监听器--执行之前执行的方法");
}
@Override
public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
System.out.println("监听器--执行之后执行的方法");
}
}
3.エラスティックジョブ視覚化コンソールの使用方法は?
1.プロジェクトをダウンロードします:https://github.com/apache/shardingsphere-elasticjob/tree/2.1.5/elastic-job-lite、ダウンロードが完了し、解凍されます
2. Mavenパッケージはelastic-job-lite-consoleプロジェクトをパッケージ化し、ターゲットディレクトリにelastic-job-lite-console-2.1.5.tar.gzファイルがあります。
3. elastic-job-lite-console-2.1.5.tar.gzファイルを解凍し、binディレクトリに入り、start.shを実行して開始します。
4. http:// localhost:8899 /にアクセスします。アカウントパスワード:root / root
コンソールに入る
1.グローバル構成、飼育係情報とmysql情報を追加します
2.ジョブ操作:ジョブ情報とサーバー情報を表示できます
3.ジョブ履歴:ジョブの実行を表示できます
4.操作補助ポート8889の使用方法は?
実稼働環境でzookeeperを使用できない場合は、ジョブの実行ステータスをジョブの補助ポートを介してエクスポートして、デバッグを容易にすることができます。
1.LiteJobConfiguration構成でジョブ補助ポートを開く必要があります。
2.dumpコマンドとncコマンドを使用する必要があります。インストールする必要はありません。
3. echo dump | nc 127.0.0.1 9888> job_debug_dump.txtコマンドを実行します