elasticjob接入方式和管理端使用
1.elasticjob接入方式
1.1 加入依賴
<dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-core</artifactId><version>2.1.5</version> </dependency> <dependency><groupId>com.dangdang</groupId><artifactId>elastic-job-lite-spring</artifactId><version>2.1.5</version> </dependency>1.2 實現任務邏輯
1.2.1 spring的方式
通過實現SimpleJob接口,最終會定時調用execute方法
package com.company.job;/*** quartz-memory-project Created by caowenyi on 2017/9/27 .*/ @Slf4j public class SampleJob implements SimpleJob {@Overridepublic void execute(ShardingContext shardingContext) {Stopwatch stopwatch = Stopwatch.createStarted();log.info("開始Sample任務的運行");String jobParameter = shardingContext.getJobParameter();long callCostTime = stopwatch.elapsed(TimeUnit.SECONDS);log.info("結束Sample任務的運行 任務參數={} 花費時間={}秒", jobParameter, callCostTime);} }配置任務的zookeeper注冊中心:applicationContext-zk.xml
參數說明:
- zk.hosts: 具體環境對應的zookeeper服務器地址。
zk.namespace:命名空間,用于在管理端區分不同的也業務方的不同環境。建議命令方式:業務方_具體環境。 如:crm_bi_task
base-sleep-time-milliseconds、max-sleep-time-milliseconds、max-retries:設置client與zookeeper連接丟失時,進行重連的策略。
ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries, int maxSleepMs) 。時間間隔 = baseSleepTimeMs * Math.max(1, random.nextInt(1 << (retryCount + 1)))
配置任務的調度信息:applicationContext-job.xml
參數說明:
- id:bean的名字
- registry-center-ref:注冊中心bean
- cron: 定時調度的cron表達式
- sharding-total-count:任務切片數量。一般只需要設置為1
- sharding-item-parameters:任務分片參數。使用0=A即可。
- description:任務的用途描述
- event-trace-rdb-data-source:數據源bean對象,將任務的執行記錄放到數據庫中。如果不需要看任務的執行歷史結果可以不用設置該值。注意:線上環境需要先建表,因為job應用一般沒有建表的權限,測試環境一般可以自動建表。
- class:任務執行類
最后將兩個job加入到spring的beanfactory.
spring工程加入方式
<context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:applicationContext-job.xmlclasspath*:applicationContext-zk.xml</param-value> </context-param>springboot工程加入方式
package com.company.job;import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ImportResource;/*** Created by caowenyi on 2017/7/28.*/ @Configuration @ImportResource(locations = {"classpath:applicationContext-zk.xml", "classpath:applicationContext-job.xml"}) public class JobConfig { }ps:后續開發新的job只需要實現SimpleJob接口、將job的配置信息加入xx-job.xml中
2 非spring方式接入
package com.dangdang.job;import com.alibaba.druid.pool.DruidDataSource; import com.dangdang.ddframe.job.config.JobCoreConfiguration; import com.dangdang.ddframe.job.config.dataflow.DataflowJobConfiguration; import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration; import com.dangdang.ddframe.job.event.JobEventConfiguration; import com.dangdang.ddframe.job.event.rdb.JobEventRdbConfiguration; import com.dangdang.ddframe.job.lite.api.JobScheduler; import com.dangdang.ddframe.job.lite.api.listener.ElasticJobListener; import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration; import com.dangdang.ddframe.job.reg.base.CoordinatorRegistryCenter; import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration; import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter; import lombok.extern.slf4j.Slf4j;/*** Created by caowenyi on 2017/7/11.*/ @Slf4j public class Main {private static final String zkHosts = "192.168.5.59:2181,192.168.5.61:2181,192.168.5.66:2181";//private static final String zkHosts = "192.168.16.146:2181,192.168.16.147:2181,192.168.16.148:2181";private static final String zkNameSpace = "zk-elastic-job";public static void main(String[] args) {log.info("Main starting ..........................");SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(JobCoreConfiguration.newBuilder("simpleElasticJob", "* 0/30 * * * ?", 3).shardingItemParameters("0=A,1=B,2=C").failover(true).build(),"com.dangdang.job.MySimpleJob");LiteJobConfiguration simpleJobRootConfiguration =LiteJobConfiguration.newBuilder(simpleJobConfiguration).build();DataflowJobConfiguration dataflowJobConfiguration = newDataflowJobConfiguration(JobCoreConfiguration.newBuilder("dataFlowElasticJob", "0/10 * * * * ?",3) .shardingItemParameters("0=A,1=B,2=C").build(), "com.dangdang.job.MyDataFlowJob", false);LiteJobConfiguration dataflowJobRootConfiguration =LiteJobConfiguration.newBuilder(dataflowJobConfiguration).build();ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration(zkHosts, zkNameSpace);zookeeperConfiguration.setBaseSleepTimeMilliseconds(1000);zookeeperConfiguration.setMaxSleepTimeMilliseconds(3000);zookeeperConfiguration.setMaxRetries(3);CoordinatorRegistryCenter coordinatorRegistryCenter =new ZookeeperRegistryCenter(zookeeperConfiguration);coordinatorRegistryCenter.init();DruidDataSource dataSource = new DruidDataSource();dataSource.setName("localdb");dataSource.setUrl("jdbc:mysql://localhost:3306/elastic_job?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8");dataSource.setUsername("cweeyii");dataSource.setPassword("cweeyii");dataSource.setDriverClassName("com.mysql.jdbc.Driver");JobEventConfiguration jobEventConfiguration = new JobEventRdbConfiguration(dataSource);ElasticJobListener jobListener = new MyJobAllShardListener();new JobScheduler(coordinatorRegistryCenter, simpleJobRootConfiguration, jobEventConfiguration,jobListener).init();new JobScheduler(coordinatorRegistryCenter, dataflowJobRootConfiguration, jobEventConfiguration).init();log.info("Main finished ..........................");} }流程上總體分為三步:
1. 初始化配置中心(zookeeper)
2. 配置任務執行信息并注冊到zookeeper
3. 初始化quartz調度主線程進行調度
3.elasticjob管理端的使用
管理端環境地址:http://xxxxx:8899/ 用戶名:root 密碼:root
只用于查看任務執行情況,沒有操作權限的用戶和密碼:guest guest
線上環境:http://xxxxxx:8899/ root權限用戶和密碼,找悅同申請
guest用戶還是可用
3.1 管理端的配置
- 首先可以在右上角點擊switch language選擇為中文
添加namespace配置
- 命名空間:配置文件中的zk.namespace
- 注冊中心名稱:最好和配置文件中的命名空間一致
- 注冊中心地址:配置文件中的zk.hosts
- 登錄憑證:zookeeper是否設置登錄憑證(一般都沒有設置)
配置完成點擊提交,點擊連接,變為已連接狀態
- 作業操作選項下,進行作業操作
- 修改:支持修改調度任務的調度信息、傳入參數等
大部分情況下只需要修改:cron表達式和自定義參數 - 服務器維度
主要提供了:禁止某個服務器不能進行任務的調度,已經服務器狀態信息等 - 添加數據追蹤源設置(用于獲取數據庫中記錄的任務執行歷史狀態)
需要配置了event-trace-rdb-data-source屬性
<job:simple id="sampleJob" registry-center-ref="regCenter" cron="0 30 * * * ?"sharding-total-count="1" sharding-item-parameters="0=A" description="demo任務"event-trace-rdb-data-source="dataSource" class="com.company.job.SampleJob"/>可以查看任務的執行情況,并支持過濾搜索,支持時間排序等
5. 查看歷史執行狀態(不常用)
主要是查看任務執行的歷史運行狀態
任務下線
- 首先需要將任務從job服務器中刪除(只需要刪除xml中任務的配置即可)
- 再從elasticjob管理端對應的namespace中刪除已經下線的任務
4.開發的注意事項
總結
以上是生活随笔為你收集整理的elasticjob接入方式和管理端使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#-ToString格式化
- 下一篇: 观察者模式在JDK应用中的源码分析