总概
A、技术栈
- 开发语言:Java 1.8
- 数据库:MySQL、Redis、MongoDB、Elasticsearch
- 微服务框架:Spring Cloud Alibaba
- 微服务网关:Spring Cloud Gateway
- 服务注册和配置中心:Nacos
- 分布式事务:Seata
- 链路追踪框架:Sleuth
- 服务降级与熔断:Sentinel
- ORM框架:MyBatis-Plus
- 分布式任务调度平台:XXL-JOB
- 消息中间件:RocketMQ
- 分布式锁:Redisson
- 权限:OAuth2
- DevOps:Jenkins、Docker、K8S
B、本节实现目标
- 搭建xxl-job环境
- xxl-job-admin平台创建定时任务
- 动态创建定时任务,实现动态创建15分钟未支付自动关闭订单的定时任务
一、部署xxl-job
1.1 下载xxl-job源码
下载地址:https://github.com/xuxueli/xxl-job
xxl-job源码
1.2 初始化“调度数据库”
调度数据库初始化SQL脚本” 位置为:/xxl-job/doc/db/tables_xxl_job.sql
。
调度中心支持集群部署,集群情况下各节点务必连接同一个MySQL实例。如果MySQL做主从,调度中心集群节点务必强制走主库。
1.3 部署调度中心 xxl-job-admin
1.3.1 xxl-job-admin项目
xxl-job源码里有3个项目:xxl-job-admin
、xxl-job-core
、xxl-job-executor-samples
,
- xxl-job-admin:调度中心
- xxl-job-core:公共依赖
- xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
我们部署调度中心需要用到xxl-job-admin
1.3.2 启动xxl-job-admin
将xxl-job-admin
调度中心项目用IDEA打开,配置文件地址:/xxl-job/xxl-job-admin/src/main/resources/application.properties
我们修改三个地方:
- 端口:端口默认是8080,这里我们将端口改成8081
- 数据库配置:修改数据库地址和账号密码
- accessToken:默认是default_token
修改完后启动xxl-job-admin
修改端口
修改数据库地址和账号密码
修改accessToken
1.3.3 访问xxl-job-admin
调度中心访问地址:http://localhost:8081/xxl-job-admin
,该地址执行器将会使用到,作为回调地址。
默认登录账号 “admin/123456”, 登录后运行界面如下图所示。
xxl-job-admin
二、配置部署“执行器项目”
执行器项目:xxl-job-executor-sample-springboot
,可直接使用,也可以参考其并将现有项目改造成执行器。
执行器项目作用:负责接收“调度中心”的调度并执行;可直接部署执行器,也可以将执行器集成到现有业务项目中。
我们不用xxl-job-executor-sample-springboot
,而是直接用mall-order项目来做为执行器项目。
2.1 新增执行管理器
先在xxl-job-admin上新增一个执行管理器:executor-order
新增执行管理器
新增执行管理器
2.2 maven依赖
在mall-pom项目的pom.xml里引入xxl-job-core的maven依赖
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>${xxljob.version}</version>
</dependency>
xxl-job-core
2.3 执行器组件配置
执行器组件,配置文件地址:/xxl-job/xxl-job-executor-samples/xxl-job-executor-sample-springboot/src/main/java/com/xxl/job/executor/core/config/XxlJobConfig.java
将该代码复制到mall-order项目
XxlJobConfig
2.4 配置xxl-job连接信息
修改mall-order服务里的bootstrap-dev.yml配置信息
server:
port: 7030
spring:
application:
name: mall-order
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: dev_id
file-extension: yml
shared-configs:
- data-id: common.yml
group: DEFAULT_GROUP
refresh: true
discovery:
namespace: dev_id
swagger:
enabled: true
title: 订单服务
basePackage: com.ac.order.controller
version: 1.0
description: 订单服务相关接口
xxl:
job:
# 执行器通讯TOKEN [选填]:非空时启用;
accessToken: 123456
admin:
# 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
addresses: http://127.0.0.1:8081/xxl-job-admin
executor:
# 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册