SpringBoot分布式任务调度,可支持rabbitmq与kafka两种消息中间件的可回滚微服务实现。

2023-11-06

分布式任务调度管理 Distribution task center. 支持Rabbit与kafka两种消息队列,实现立即执行与根据CronExpress表达式的执行及更加复杂的复合执行策略。在任务执行过程中可完成回滚操作。

 

在微服务中我们经常会采用cron或spring scheduler来实现调度任务。但是在分布式多节点架构中,我们不能让每个节点都去执行同一个任务。并且在任务执行过程中一旦遇到失败,必须具备一种回滚机制来保证分布式事务调度的一致性与完整性。本项目采用了rabbitmq与kafka两种消息队列,将任务调度从原始的业务微服务中有效分离,降低业务代码的耦合度。所有调度任务均由调度中心微服务发起。使原有业务真正实现分布式多节点运行。

项目介绍

taskcenter-api - 任务中心api
taskcenter-biz - 任务中心微服务
taskcenter-test - 调度任务实现示例

所有的API均可在taskcenter-test中查看到具体的调用及实现。

运行示例

Java端引入

可参考taskcenter-test

1. pom.xml

<dependency>
    <groupId>huxg</groupId>
    <artifactId>taskcenter-api</artifactId>
    <version>1.0</version>
</dependency>

2.application.yml

spring:
    # 使用rabbitmq 作为消息中间件时的配置
    #rabbitmq: 
    #    host: ${RABBIT_MQ_HOST:172.16.70.3}
    #    port:  ${RABBIT_MQ_PORT:6672}
    #    username: user
    #    password: mqpassWord
    
    # 使用kafka作为消息中间件时的配置
    #kafka:
    #    bootstrap-servers: 172.16.70.3:9092
    #    immediate-job-topic: base
    #    cron-job-topic: cron
    #    producer:
    #        value-serializer: org.apache.kafka.common.serialization.StringSerializer
    #        key-serializer: org.apache.kafka.common.serialization.StringSerializer
    #        buffer-memory: 1351322
    #        batch-size: 16384

3. @SpringBootApplication 添加包扫描

@SpringBootApplication(scanBasePackages = "com.xxxxx")

4. API说明

    4.1 简单的调度任务定义(基于注解定义分布式调度任务)

// 每分钟执行一次的调度任务
@DistributedTask(jobGroupId = "任务组Id", jobId = "任务Id", jobName = "任务名称", requestUrl = "http://taskcenterTest/api/executeEveryMinute", cornExpress = "0 0/1 * * * ?")
	
// 每天15:00:00 执行的调度任务
@DistributedTask(jobGroupId = "任务组Id", jobId = "任务Id", jobName = "任务名称", requestUrl = "http://taskcenterTest/api/executeEveryMinute", executeTime = "15:00:00")

    4.2 执行一个立即执行的任务

BaseMessage job = new BaseMessage();
job.setJobGroupId("任务组名");
job.setJobId("任务ID");
job.setRequestUrl("http://taskcenterTest/api/immediateTask");
taskcenter.executeJob(job);

    4.3 执行定时任务

ScheduledJob job = new ScheduledJob();
job.setJobId(UIController.class.getName());
job.setJobGroupId("任务组名");
job.setJobName("任务名称");
job.setCornExpress(cronExpression);
job.setRequestUrl("http://taskcenterTest/api/executeCronTask2");
job.setStatus(TaskCenterConstants.TASK_STATUS_WAITING);
job.setJobType(TaskCenterConstants.JOB_TYPE_CRON);
taskcenter.executeJob(job);

    4.4 执行复合调度任务

ScheduledJob job = new ScheduledJob();
job.setJobId(UIController.class.getName());
job.setJobGroupId("任务组Id");
job.setJobName("复杂调度任务");
job.setRequestUrl("http://taskcenterTest/api/executeComplexTask");
job.setJobType(TaskCenterConstants.JOB_TYPE_COMPLEX); // 注意,需要设置为复合执行模式
job.setStatus(TaskCenterConstants.TASK_STATUS_WAITING);
job.setRepeatCount(5);
job.setInterval(5000);
job.param("sendData", data);
taskcenter.executeJob(job);

    4.5 Job简介

     jobId  # 任务Id,停止任务时需要该Id

     jobName # 任务名称

     requestUrl # 调度任务执行时会调用这里给定的地址

      rollbackUrl # 回滚请求

      param # 调度任务其他需携带的参数

      startTime # 调度任务开始执行时间

      endTime # 调度任务终止执行的时间。

       repeatCount # 重复执行次数,可理解为震荡次数

       jobType # 任务的类型

源代码下载

本项目持续更新,git clone下载最新版本。

源代码下载及Github更新地址

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot分布式任务调度,可支持rabbitmq与kafka两种消息中间件的可回滚微服务实现。 的相关文章

随机推荐

  • 安装MySQL时出现黄色感叹号,提示3306已被占用

    今天安装MySQL遇到这个问题 取消安装后卸载 再次安装 一直是这个问题 查询资料后得知是3306端口被占用 那么windows系统如何查看现在某个端口的应用进程id呢 命令是 netstat aon findstr 3306 那么 最后的
  • zabbix服务器监控

    zabbix服务器监控 文章目录 zabbix服务器监控 一 zabbix服务器监控 概念 1 服务器上安装zabbix agent 2 启动zabbix agent服务 二 监控远程linux服务器 1 将server的hosts文件复制
  • 数据导出Excel时,忽略一些导出项(Java)

    仅供学习 不可转载 欢迎评论 导言 在做导出功能时 我们一般都是导出到一个Excel表格里面 但是有些数据字段我们不想导出来 如果导出来之后再去删除 这时就显得比较麻烦 下面介绍一种方法直接就可以忽略一些不想导出的数据字段 实例演示 下面这
  • angularJS懒加载实现

    angularJS懒加载 主要是分担首页文件加载效率提高渲染性能 实现要点 1 项目模块化 使用import export 进行模块化 2 路由 使用ui router进行路由切换 3 模块异步加载 1 使用import 实现文件动态加载
  • ​LeetCode刷题实战479:最大回文数乘积

    算法的重要性 我就不多说了吧 想去大厂 就必须要经过基础知识和业务逻辑面试 算法面试 所以 为了提高大家的算法能力 这个公众号后续每天带大家做一道算法题 题目就从LeetCode上面选 今天和大家聊的问题叫做 最大回文数乘积 我们先来看题面
  • 批处理获取管理员权限

    废话少说 先上代码 echo off BatchGotAdmin REM gt Check for permissions IF PROCESSOR ARCHITECTURE EQU amd64 gt nul 2 gt 1 SYSTEMRO
  • TCP/IP体系结构简介

    一 网络体系的构成 访问方式 数据帧格式 布线类型 布线规则 二 网络体系的类型 IEEE 802 3 以太网 在大多数办公室和家庭中使用的基于线缆的网络 就是常见的有线局域网 IEEE 802 11 无线网络 在办公室 家庭和咖啡厅使用的
  • 如何下载和安装 Visual C++6.0(解决未响应版)

    下载链接一 https pan baidu com s 1VEggDaoKgt0ZW8Q5wSu zQ 提取码 4chy 下载链接二 https dl pconline com cn download 413670 html
  • 行列式&矩阵_MD&Latex

    行列式 left begin array cccc 1 6 9 7 90 f x 9 psi x g x end array right left begin array cccc 1 6 9 7 90 f x 9 psi x g x en
  • 使用mklink突破百度网盘等软件的自动备份文件夹数量限制

    百度网盘 夸克等各种网盘都提供了自动备份文件夹的功能 但一般都有文件夹数量的限制 比如百度网盘就限制了最多只能同时备份5个文件夹 想整盘备份的话显然是不够的 当然 你可以把所有的文件夹都转移到一个母文件夹下 但这样明显不太方便 操作起来还涉
  • 解决idea中maven的javaweb项目,输出在控制台上的中文乱码问题

    在idea中创建一个maven的javaweb项目 当有中文输出到控制台的时候 就会出现乱码 下图 第一张图是我们要输出的中文 但是我们通过servlet访问之后 控制台打印出来的都是乱码 而且我们使用的是maven自带的tomcat 所以
  • 6.6 Hessenberg法求特征值

    文章目录 1 Gram Schmidt正交化的缺点 2 Hessenberg矩阵 3 海森堡化简 Hessenberg reduction 4 Givens rotation 5 多次Givens rotation QR 6 循环QR直至收
  • Java并发编程学习11-任务执行演示

    Java并发编程学习系列 任务执行演示 引言 1 串行的页面渲染器 2 携带结果的任务 3 使用 Future 实现页面渲染器 4 使用 CompletionService 实现页面渲染器 5 为任务设置时限 5 1 限时获取广告信息示例
  • Qt线程基础使用指南

    Qt的线程一共3种使用方式 继承QThread 继承QRunnable 调用moveToThread 方法 本文旨在系统的记录这3种方法的使用过程 以及解决使用这些方法中遇到的bug 一 继承QThread 1 创建线程文件 继承基类QTh
  • day02 - Java基础语法

    day02 Java基础语法 0 类型转换问题 类型转换 理解 在Java中 会存在不同类型的数据需要一起参与运算 所以这些数据类型之间是需要相互转换的 分为两种情况 自动类型转换和强制类型转换 自动类型转换 类型范围小的变量 可以直接赋值
  • 手机探测帧频率的测试

    手机的探测帧的频率在802 11协议里面并没有一个详细的要求 并且各个厂家从省电等方面考虑设置的探测帧频率也各不相同 并且在wifi界面下 锁屏状态下 忽略掉wifi再锁屏的状态下探测帧的频率都不同 所以wifi探针并不是一个可靠的用户感知
  • FPGA实战小项目

    1 基于fpga俄罗斯方块的实现 基于fpga俄罗斯方块的实现 2 基于fpga白平衡的实现 基于fpga白平衡的实现 3 基于fpga的目标跟踪 树叶 基于fpga的目标跟踪 树叶 4 基于fpga数字0 9识别的实现 基于fpga数字0
  • HCNP——水平分割、毒性逆转、触发更新、毒性路由

    一 水平分割 原理是 RIP路由器从某个接口收到的路由不会再从该接口通告回去 这个机制很大程度上消除了RIP路由的环路隐患 二 毒性逆转 毒性逆转是另一种防止路由环路的有效机制 其原理是 RIP从某个接口学到路由后 当他从该接口发送Resp
  • linux的mtime的用法,Find–atime –ctime –mtime的用法与区别总结

    周五有同事问起find命令中 mtime n mtime n以及 mtime n的用法区别 当时虽然记得这里n是n个24个小时的意思 也是对所有这几个属性详细的用法却一知半解 索性周末仔细google并且实践了一番 终于理清楚了个中乾坤 f
  • SpringBoot分布式任务调度,可支持rabbitmq与kafka两种消息中间件的可回滚微服务实现。

    分布式任务调度管理 Distribution task center 支持Rabbit与kafka两种消息队列 实现立即执行与根据CronExpress表达式的执行及更加复杂的复合执行策略 在任务执行过程中可完成回滚操作 在微服务中我们经常