故事
首页
指南
  • Java
  • Python
  • Linux
  • 前端
  • Docker
  • 实践
  • 折腾
  • 分类
  • 标签
  • 归档
壁纸 (opens new window)
GitHub (opens new window)
首页
指南
  • Java
  • Python
  • Linux
  • 前端
  • Docker
  • 实践
  • 折腾
  • 分类
  • 标签
  • 归档
壁纸 (opens new window)
GitHub (opens new window)
  • Java基础

    • String类的深入学习
    • HashMap源码学习
    • Java8新特性回顾
  • Java框架

    • POI事件模式解析并读取Excel文件数据
    • SpringMVC的执行流程源码分析
    • netty+websocket实现即时通讯功能
    • 分布式定时任务解决方案xxl-job
      • 背景
      • xxl-job
    • spring-session实现集群session共享
    • springcloud优雅下线服务
    • Java日志发展历史
    • Mybatis Generator配置
    • JavaSPI机制和Springboot自动装配原理
    • Spring Cloud Config接入
    • 使用spring validation进行参数校验
    • dubbo接口超时配置
    • ConfigurationProperties注解
    • EasyExcel导出excel
  • 中间件

    • 分布式锁解决方案
    • 关于消息中间件MQ
    • kafka学习记录
    • kakfa实践
    • kakfa重复消费问题处理
  • 数据库

    • MySql索引
    • SQL优化学习
    • Otter实现数据全量增量同步
  • 开发工具

    • Maven的生命周期
    • nexus无法下载依赖的问题记录
  • 其他

    • linux服务器安装OpenOffice踩坑
    • POI踩坑-zip file is closed
    • OpenJDK没有jstack等命令的解决办法
    • 微信小程序加密数据对称解密工具类
    • mybatis的classpath配置导致的jar包读取问题
    • feign请求导致的用户ip获取问题记录
    • ribbon刷新服务列表间隔和canal的坑
    • cpu占用率高排查思路
  • 简介
  • java
  • Java框架
storyxc
2021-06-19

分布式定时任务解决方案xxl-job

# 分布式定时任务解决方案xxl-job

# 背景

今天领导让我了解下分布式定时任务的内容,对项目中目前的定时任务改造一下,公司目前项目中封装的定时任务注解是基于spring的scheduler的,单机环境下没问题,但是为了服务的高可用生产都是集群部署的,会导致任务多次运行的问题,上家公司用的ssm,定时任务选型是Quartz,生产上采用的quartz的集群部署,quartz集群是不会出现任务重复执行的,原理跟下文讲到的xxl-job一样都是通过数据库表来加锁实现

# xxl-job

Xxl-job官网:https://www.xuxueli.com/xxl-job/

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。

选择xxl-job的原因有以下几点:

  • 调度和任务解耦,有单独的调度中心及控制台
  • 代码易扩展
  • 实现的功能比较全面

使用流程:

  • 执行doc中的sql脚本,建相关的库表,具体表的作用可阅读帮助文档

  • 修改xxl-job-admin配置文件后可以直接启动admin应用

  • 修改执行器应用中配置文件,注意匹配admin的相关信息

  • copy一份示例执行器的代码 修改应用端口和执行端口

  • 启动两个示例执行器应用(模拟集群)

  • 打开控制台可以看到已经注册上了两个节点 Snipaste_20210318_201851.png

  • 在控制台任务管理中修改任务的相关信息,这里只试个最简单的,更多高级配置请看使用文档

Snipaste_20210318_202127.png

Snipaste_20210318_202218.png

Snipaste_20210318_202226.png

可以在控制台的调度记录中看到,集群模式下任务也只执行了一次.

除了cron任务,xxl-job中还支持周期性的任务,shell任务等.路由策略还支持轮询,一致性哈希,故障转移等,在admin中配置好java.mail信息,在控制配置任务时添加告警邮件,在任务调度出现异常时还会邮件告警

集成到微服务系统的思路:

  • 数据库建表
  • 新建一个job-admin服务将xxl-job-admin迁移,修改配置信息
  • 在需要定时任务的业务服务中引入xxl-core依赖
  • 在任务类中实现业务逻辑,任务方法上加上@XxlJob(value = "xxHandler")
  • admin服务启动后启动具体的业务服务
  • 在调度中心新建任务,配置相关信息,注意JobHandler的值为@XxlJob注解的Value
编辑 (opens new window)
#定时任务
上次更新: 2022/04/21, 18:12:24
netty+websocket实现即时通讯功能
spring-session实现集群session共享

← netty+websocket实现即时通讯功能 spring-session实现集群session共享→

Theme by Vdoing | Copyright © 2019-2023 story | 豫ICP备19046036号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式