SpringCloud与elastic-job集成(一)

背景

在项目初期,基于quartz我们做了一个原始的job调度服务,用以执行我们的定时任务,但是随着业务的扩充,对性能及稳定性有了更高的要求.

就目前而言,除了优化代码,调整单机硬件设备外,已经没有其他方式了,对定时任务代改造势在必行.

elastic-job

elastic-job相关资料可以从如下博文中获取,总结的非常好,就不在重复赘述,本文仅仅解决如何与SpringCloud集成的问题.

官网:http://elasticjob.io/docs/elastic-job-lite/00-overview
参考资料:https://blog.csdn.net/lovelong8808/article/category/7670721
项目开源地址:https://github.com/elasticjob

elastic-job-spring-boot-starter

将elastic-job以组件的形式引入,在该过程中参考了:

项目开源地址:https://github.com/yinjihuan/elastic-job-spring-boot-starter

将源码克隆下来后,按照readme文件,配置zookeeper及其他信息:

image.png
image.png

与SpringCloud集成

基于elastic-job-spring-boot-starter及我们自身的实际情况,我重写了该starter,添加了我们自己的处理方式,具体处理会在下一篇的文章中与大家分享.

在集成过程中需要注意的是,插件自身的:curator-client,curator-framework,curator-recipes与SpringCloud组件中的curator-client,curator-framework,curator-recipes有版本冲突.

排查问题过程很痛苦.最终在开源中国中得到了解答:

https://www.oschina.net/question/3711138_2268227?sort=time
<properties>
   <elastic-job.version>2.1.5</elastic-job.version>
   <curator.version>2.10.0</curator.version>
</properties>

<dependencies>
     <dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-core</artifactId>
            <version>${elastic-job.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>curator-client</artifactId>
                    <groupId>org.apache.curator</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>curator-framework</artifactId>
                    <groupId>org.apache.curator</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>curator-recipes</artifactId>
                    <groupId>org.apache.curator</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-framework</artifactId>
            <version>${curator.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-client</artifactId>
            <version>${curator.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.curator</groupId>
            <artifactId>curator-recipes</artifactId>
            <version>${curator.version}</version>
        </dependency>
</dependencies>

elastic-job-lite-console

这是个elastic-job的管理台控制工具.

image.png

具体安装部署可参考:

https://blog.csdn.net/u013274055/article/details/77767506?locationNum=5&fps=1

elastic-job-lite-lifecycle

该插件配合elastic-job-lite-console使用,可以通过API操控JOB运行状态

插件引入

<dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-lifecycle</artifactId>
            <version>2.1.5</version>
</dependency>

核心代码

JobOperateAPI jobAPIService= JobAPIFactory.createJobOperateAPI("zookeeper地址", "任务命名空间", Optional.fromNullable(null));
jobAPIService.trigger(Optional.of("定时任务类的全类名"), Optional.<String>absent())
public interface JobOperateAPI {
    void trigger(Optional<String> var1, Optional<String> var2);

    void disable(Optional<String> var1, Optional<String> var2);

    void enable(Optional<String> var1, Optional<String> var2);

    void shutdown(Optional<String> var1, Optional<String> var2);

    void remove(Optional<String> var1, Optional<String> var2);
}

结语

本篇仅做一个简单介绍,以及一个思路梳理,在下一篇文章中,就我们当前项目会给出一个实际的解决方案.

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏三木的博客

Linux shell 程序设计2——bash的内置命令

常用的内置命令忽略,来看看shell编程中其他一些重要的内置命令: 1、help:显示所有内置命令列表,或显示一个具体命令的用法。 -s: 表示列出命令的语法...

2026
来自专栏电光石火

运行jar包找不到主类

在正确编译好java程序之后,打包,然后在命令行输入java -jar ,却弹出找不到或无法加载主类。 一检查,我的path环境变量都是对的呀?jav...

3969
来自专栏mySoul

一个基于Node.js的本地快速测试服务器

第一个参数为post地址,第二个参数为端口号,将会把读取的JSON数据输出在控制台,并写入文件中,文件路径为 ./log/data.json

1375
来自专栏地方网络工作室的专栏

推荐一个命名变量的神奇网站 CODELF

推荐一个命名变量的神奇网站 CODELF 在我们写程序的时候,总是需要去给各种变量命名。于是各种命名大法都上来了,有拼音的,有首字母缩写的,各种各样。而我们推荐...

2777
来自专栏编程坑太多

python web开发-flask中日志的使用

2054
来自专栏运维小白

9.2 grep(中)

grep用法 grep -n 'root' /etc/passwd grep -nv 'nologin' /etc/passwd grep '[0-9]'/et...

1767
来自专栏技巅

Glusterfs之rpc模块源码分析(中)之Glusterfs的rpc模块实现(1)

1653
来自专栏搜云库

Scala-2.13.0 安装及配置

Scala 简介 Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在J...

22710
来自专栏技术博客

Asp.Net Mvc3.0(MEF依赖注入理论)

Managed Extensibility Framework(MEF)是.NET平台下的一个扩展性管理框架,它是一系列特性的集合,包括依赖注入(DI)等。ME...

642
来自专栏游戏开发那些事

【python游戏编程之旅】第二篇--pygame中的IO、数据

本系列博客介绍以python+pygame库进行小游戏的开发。有写的不对之处还望各位海涵。

1094

扫码关注云+社区