微服务-分布式任务调度集成

131 阅读2分钟

一、概述

在分布式任务调度-XXL-JOB(一)中介绍了其基本使用,本文章中介绍如何集成到微服务工程中。

二、XXL-JOB-ADMIN容器化

为了不要每次都打开IDE运行XXL-JOB-ADMIN,我把它制作成进行,运行在我的Desktop环境中。主要命令如下:

# 制作镜像
docker build . -t xxl-job-admin:2.4.0
# 运行镜像
docker run --name xxl-job-admin -p 8080:8080 -d xxl-job-admin:2.4.0

成功运行镜像后,访问如下地址:

http://localhost:8080/xxl-job-admin 默认用户名和密码为admin/123456

这中间也出现了一个小插曲,由于我的MySql也是用Docker部署的,在桌面环境是可以通过127.0.0.1进行访问,但是容器化后的应用,使用127.0.0.1无法访问,通过查询一些资料,发现可以通过进行MySql的镜像,通过如下命令查询到对应IP。将应用程序修改MySql的IP后重新打包启动,成功。

cat /etc/hosts

image.png

三、微服务集成

3.1 增加job工程

工程结构如下图: image.png pom.xml的依赖配置主要如下,重点是增加了xxl-job-core依赖:

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-log4j2</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        <exclusions>
            <exclusion>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-logging</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

    <!-- xxl-job-core -->
    <dependency>
        <groupId>com.xuxueli</groupId>
        <artifactId>xxl-job-core</artifactId>
        <version>2.4.0</version>
    </dependency>

</dependencies>

配置文件涉及XXL-JOB的配置:

xxl:
  job:
    admin:
      addresses: http://127.0.0.1:8080/xxl-job-admin
    accessToken: default_token
    executor:
      appname: job-demo
      address:
      ip:
      port: 9999
      logpath: /data/applogs/xxl-job/jobhandler
      logretentiondays: 30

本次测试的Job定义如下,调用了微服务的nacosJobHello方法,仅仅在Nacos微服务中打印了日志:

@Component
public class NacosXxlJob {

    @Autowired
    private RestTemplate restTemplate;

    @XxlJob("nacosJobHandler")
    public void nacosJobHandler() throws Exception {
        restTemplate.getForObject("http://nacos-demo/nacosJobHello", void.class);
    }

}

观察结果,成功:

image.png

四、总结

  • docker容器化XXL-JOB-ADMIN的过程中,对于docker的网络相关功能不太熟悉,后续可以再学习学习。
  • 学习了官方的案例后,集成到工程算比较简单了,基本一步到位,没有遇到问题。
  • 我的demo中将job的appname修改为job-demo,在控制台中需要修改为一样的名称,否则无法正确调用。

image.png

五、源码

gitee.com/animal-fox_…