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 實(shí)現(xiàn)任務(wù)邏輯
1.2.1 spring的方式
通過(guò)實(shí)現(xiàn)SimpleJob接口,最終會(huì)定時(shí)調(diào)用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("開(kāi)始Sample任務(wù)的運(yùn)行");String jobParameter = shardingContext.getJobParameter();long callCostTime = stopwatch.elapsed(TimeUnit.SECONDS);log.info("結(jié)束Sample任務(wù)的運(yùn)行 任務(wù)參數(shù)={} 花費(fèi)時(shí)間={}秒", jobParameter, callCostTime);} }配置任務(wù)的zookeeper注冊(cè)中心:applicationContext-zk.xml
參數(shù)說(shuō)明:
- zk.hosts: 具體環(huán)境對(duì)應(yīng)的zookeeper服務(wù)器地址。
zk.namespace:命名空間,用于在管理端區(qū)分不同的也業(yè)務(wù)方的不同環(huán)境。建議命令方式:業(yè)務(wù)方_具體環(huán)境。 如:crm_bi_task
base-sleep-time-milliseconds、max-sleep-time-milliseconds、max-retries:設(shè)置client與zookeeper連接丟失時(shí),進(jìn)行重連的策略。
ExponentialBackoffRetry(int baseSleepTimeMs, int maxRetries, int maxSleepMs) 。時(shí)間間隔 = baseSleepTimeMs * Math.max(1, random.nextInt(1 << (retryCount + 1)))
配置任務(wù)的調(diào)度信息:applicationContext-job.xml
參數(shù)說(shuō)明:
- id:bean的名字
- registry-center-ref:注冊(cè)中心bean
- cron: 定時(shí)調(diào)度的cron表達(dá)式
- sharding-total-count:任務(wù)切片數(shù)量。一般只需要設(shè)置為1
- sharding-item-parameters:任務(wù)分片參數(shù)。使用0=A即可。
- description:任務(wù)的用途描述
- event-trace-rdb-data-source:數(shù)據(jù)源bean對(duì)象,將任務(wù)的執(zhí)行記錄放到數(shù)據(jù)庫(kù)中。如果不需要看任務(wù)的執(zhí)行歷史結(jié)果可以不用設(shè)置該值。注意:線上環(huán)境需要先建表,因?yàn)閖ob應(yīng)用一般沒(méi)有建表的權(quán)限,測(cè)試環(huán)境一般可以自動(dòng)建表。
- class:任務(wù)執(zhí)行類
最后將兩個(gè)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:后續(xù)開(kāi)發(fā)新的job只需要實(shí)現(xiàn)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. 配置任務(wù)執(zhí)行信息并注冊(cè)到zookeeper
3. 初始化quartz調(diào)度主線程進(jìn)行調(diào)度
3.elasticjob管理端的使用
管理端環(huán)境地址:http://xxxxx:8899/ 用戶名:root 密碼:root
只用于查看任務(wù)執(zhí)行情況,沒(méi)有操作權(quán)限的用戶和密碼:guest guest
線上環(huán)境:http://xxxxxx:8899/ root權(quán)限用戶和密碼,找悅同申請(qǐng)
guest用戶還是可用
3.1 管理端的配置
- 首先可以在右上角點(diǎn)擊switch language選擇為中文
添加namespace配置
- 命名空間:配置文件中的zk.namespace
- 注冊(cè)中心名稱:最好和配置文件中的命名空間一致
- 注冊(cè)中心地址:配置文件中的zk.hosts
- 登錄憑證:zookeeper是否設(shè)置登錄憑證(一般都沒(méi)有設(shè)置)
配置完成點(diǎn)擊提交,點(diǎn)擊連接,變?yōu)橐堰B接狀態(tài)
- 作業(yè)操作選項(xiàng)下,進(jìn)行作業(yè)操作
- 修改:支持修改調(diào)度任務(wù)的調(diào)度信息、傳入?yún)?shù)等
大部分情況下只需要修改:cron表達(dá)式和自定義參數(shù) - 服務(wù)器維度
主要提供了:禁止某個(gè)服務(wù)器不能進(jìn)行任務(wù)的調(diào)度,已經(jīng)服務(wù)器狀態(tài)信息等 - 添加數(shù)據(jù)追蹤源設(shè)置(用于獲取數(shù)據(jù)庫(kù)中記錄的任務(wù)執(zhí)行歷史狀態(tài))
需要配置了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任務(wù)"event-trace-rdb-data-source="dataSource" class="com.company.job.SampleJob"/>可以查看任務(wù)的執(zhí)行情況,并支持過(guò)濾搜索,支持時(shí)間排序等
5. 查看歷史執(zhí)行狀態(tài)(不常用)
主要是查看任務(wù)執(zhí)行的歷史運(yùn)行狀態(tài)
任務(wù)下線
- 首先需要將任務(wù)從job服務(wù)器中刪除(只需要?jiǎng)h除xml中任務(wù)的配置即可)
- 再?gòu)膃lasticjob管理端對(duì)應(yīng)的namespace中刪除已經(jīng)下線的任務(wù)
4.開(kāi)發(fā)的注意事項(xiàng)
總結(jié)
以上是生活随笔為你收集整理的elasticjob接入方式和管理端使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: C#-ToString格式化
- 下一篇: 观察者模式在JDK应用中的源码分析