任务调度,分布式任务调度
前期回顾:在自媒体文章自动审核的时候,审核通过后,判断了文章的发布时间大于当前时间,这个时候并没有真正的发布文章,而是把文章的状态设置为了8(审核通过待发布)
定时任务的作用就是每分钟去扫描这些待发布的文章,如果当前文章的状态为8,并且发布时间小于当前时间的,立刻发布当前文章
任务调度==定时任务
如何实现任务调度?
多线程方式,结合sleep
JDK提供的API,例如:Timer、ScheduledExecutor
框架,例如Quartz ,它是一个功能强大的任务调度框架,可以满足更多更复杂的调度需求
spring task
入门案例
spring框架中默认就支持了一个任务调度,spring-task
(1)创建一个工程:spring-task-demo
pom文件
<!-- 继承Spring boot工程 --> <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.5.RELEASE</version> </parent> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency> </dependencies>
(2)引导类:
package com.itheima.task; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableScheduling; @SpringBootApplication @EnableScheduling public class TaskApplication { public static void main(String[] args) {SpringApplication.run(TaskApplication.class,args);} }
(3)编写案例
package com.itheima.task.job; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Date; @Component public class HelloJob { @Scheduled(cron = "0/5 * * * * ? *")public void eat(){System.out.println("5秒中吃一次饭,我想成为一个胖子"+new Date());}}
1.3 什么是分布式任务调度
当前软件的架构已经开始向分布式架构转变,将单体结构拆分为若干服务,服务之间通过网络交互来完成业务处理。在分布式架构下,一个服务往往会部署多个实例来运行我们的业务,如果在这种分布式系统环境下运行任务调度,我们称之为分布式任务调度。
1、并行任务调度
并行任务调度实现靠多线程,如果有大量任务需要调度,此时光靠多线程就会有瓶颈了,因为一台计算机CPU的处理能力是有限的。
如果将任务调度程序分布式部署,每个结点还可以部署为集群,这样就可以让多台计算机共同去完成任务调度,我们可以将任务分割为若干个分片,由不同的实例并行执行,来提高任务调度的处理效率。
2、高可用
若某一个实例宕机,不影响其他实例来执行任务。
3、弹性扩容
当集群中增加实例就可以提高并执行任务的处理效率。
4、任务管理与监测
对系统中存在的所有定时任务进行统一的管理及监测。让开发人员及运维人员能够时刻了解任务执行情况,从而做出快速的应急处理响应。
分布式任务调度面临的问题:
当任务调度以集群方式部署,同一个任务调度可能会执行多次,例如:电商系统定期发放优惠券,就可能重复发放优惠券,对公司造成损失,信用卡还款提醒就会重复执行多次,给用户造成烦恼,所以我们需要控制相同的任务在多个运行实例上只执行一次。常见解决方案:
分布式锁,多个实例在任务执行前首先需要获取锁,如果获取失败那么就证明有其他服务已经在运行,如果获取成功那么证明没有服务在运行定时任务,那么就可以执行。
ZooKeeper选举,利用ZooKeeper对Leader实例执行定时任务,执行定时任务的时候判断自己是否是Leader,如果不是则不执行,如果是则执行业务逻辑,这样也能达到目的。
1.4 xxl-Job简介
源码地址:xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
文档地址:分布式任务调度平台XXL-JOB
2.XXL-Job快速入门
2.1 环境搭建
2.1.1 调度中心环境要求
Maven3+
Jdk1.8+
Mysql5.7+
2.1.2 源码仓库地址
源码仓库地址 | Release Download |
---|---|
https://github.com/xuxueli/xxl-job | Download |
xxl-job: 一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。 | Download |
也可以使用资料文件夹中的源码
2.1.3 初始化“调度数据库”
请下载项目源码并解压,获取 “调度数据库初始化SQL脚本” 并执行即可。
位置:/xxl-job/doc/db/tables_xxl_job.sql
共8张表
2.1.5 配置部署“调度中心”
步骤一:调度中心配置
调度中心配置文件地址:/xxl-job/xxl-job-admin/src/main/resources/application.properties
数据库的连接信息修改为自己的数据库
### web server.port=8888 server.servlet.context-path=/xxl-job-admin ### actuator management.server.servlet.context-path=/actuator management.health.mail.enabled=false ### resources spring.mvc.servlet.load-on-startup=0 spring.mvc.static-path-pattern=/static/** spring.resources.static-locations=classpath:/static/ ### freemarker spring.freemarker.templateLoaderPath=classpath:/templates/ spring.freemarker.suffix=.ftl spring.freemarker.charset=UTF-8 spring.freemarker.request-context-attribute=request spring.freemarker.settings.number_format=0.########## ### mybatis mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml #mybatis.type-aliases-package=com.xxl.job.admin.core.model ### xxl-job, datasource spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?Unicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8 spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ### datasource-pool spring.datasource.type=com.zaxxer.hikari.HikariDataSource spring.datasource.hikari.minimum-idle=10 spring.datasource.hikari.maximum-pool-size=30 spring.datasource.hikari.auto-commit=true spring.datasource.hikari.idle-timeout=30000 spring.datasource.hikari.pool-name=HikariCP spring.datasource.hikari.max-lifetime=900000 spring.datasource.hikari.connection-timeout=10000 spring.datasource.hikari.connection-test-query=SELECT 1 ### xxl-job, email spring.mail.host=smtp.qq.com spring.mail.port=25 spring.mail.username=xxx@qq.com spring.mail.password=xxx spring.mail.properties.mail.smtp.auth=true spring.mail.properties.mail.smtp.starttls.enable=true spring.mail.properties.mail.smtp.starttls.required=true spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory ### xxl-job, access token xxl.job.accessToken= ### xxl-job, i18n (default is zh_CN, and you can choose "zh_CN", "zh_TC" and "en") xxl.job.i18n=zh_CN ## xxl-job, triggerpool max size xxl.job.triggerpool.fast.max=200 xxl.job.triggerpool.slow.max=100 ### xxl-job, log retention days xxl.job.logretentiondays=30
步骤二:部署项目
如果已经正确进行上述配置,可将项目编译打包部署。
启动方式一:这是一个springboot项目,可以在idea中直接启动,不推荐使用
启动方式二:
执行maven打包命令:package
打完包以后,从项目的target目录中找到jar包拷贝到不带空格和中文的目录下
执行以下命令,启动项目
java -jar xxl-job-admin-2.2.0-SNAPSHOT.jar
调度中心访问地址:http://localhost:8888/xxl-job-admin
任务调度,分布式任务调度相关推荐
- java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...
本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri 引言 HelloGitHub 推出的<讲解开源项目>[1]系列. 项目地址: https://githu ...
- 分布式任务调度系统V1
分布式任务调度系统V1目标 初步目标实现,实现任务的下发分配,分布式任务执行,支持任务分片(在代码上支持),任务执行记录. 任务调度系统构思 基于C/S架构实现,基于长连接来管理实现,当前版本的逻辑架 ...
- Quartz 实现分布式任务调度
2019独角兽企业重金招聘Python工程师标准>>> 情景 在开发的时候可能需要用到任务调度,通常我们使用quartz,单独部署一个实例来进行任务调度,然后就会存在单点的风险,qu ...
- 【Python】轻量级分布式任务调度系统-RQ
一 前言 Redis Queue 一款轻量级的P分布式异步任务队列,基于Redis作为broker,将任务存到redis里面,然后在后台执行指定的Job.就目前而言有三套成熟的工具cele ...
- XXL-JOB v2.0.2,分布式任务调度平台
v2.0.2 Release Notes 1.底层通讯方案优化:升级较新版本xxl-rpc,由"JETTY"方案调整为"NETTY_HTTP"方案,执行器内嵌n ...
- 这些优秀的国产分布式任务调度系统,你用过几个?
2019独角兽企业重金招聘Python工程师标准>>> 分布式调度在互联网企业中占据着十分重要的作用,尤其是电子商务领域,由于存在数据量大.高并发的特点,对数据处理的要求较高,既要保 ...
- 分布式任务调度平台 XXL-JOB
https://opentalk.upyun.com/303.html 2017 年 10 月 22 日,又拍云 Open Talk 联合 Spring Cloud 中国社区成功举办了"进击 ...
- XXL-JOB v2.0.1 发布,分布式任务调度平台
XXL-JOB 正在角逐 " 2018 开源中国软件",期待您宝贵的一票! 投票链接: https://www.oschina.net/proje... v2.0.1 Releas ...
- 分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案
分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案 参考文章: (1)分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案 (2)https://www.cnblogs.co ...
- XXL-JOB v2.0.2,分布式任务调度平台 | 多项特性优化更新
开发四年只会写业务代码,分布式高并发都不会还做程序员? v2.0.2 Release Notes 1.底层通讯方案优化:升级较新版本xxl-rpc,由"JETTY"方案调整为& ...
最新文章
- 这五个网站可以让你免费学习编程,快收藏!
- Python网络爬虫从入门到实践 -- chapter 1 -- 网络爬虫入门
- ASP.NET自定义错误页面,分离配置信息,多环境发布
- Lync Server多SIP域环境和简单URL地址部署
- 某公司ASP.NET应聘上机试题
- STM32——电容触摸按键
- Snipaste工具的下载和使用
- Repeating Annotations
- mapbox-gl添加threejs飞线
- 【全局盘点】华为云政企全栈技术创新能力图谱
- 求一个十六进制数的各二进制位_C语言实现
- unity小技巧收集总结--自用(三)
- python网易云音乐下载,可选择歌曲,下载路径
- python是哪种动物_基于Python的动物识别专家系统
- JavaMail邮件系统中的addRecipient();和setRecipient();区别?
- 爽啊!写了一个网页:首字母索引的单词(十分垃圾,简单的不得了)
- CFS调度器学习总结
- 失易得数据恢复软件,再也不担心数据丢失
- 《MEMORY NETWORKS》翻译 Jason Weston, Sumit Chopra Antoine Bordes
- 【前端】保姆级的CSS简介
热门文章
- July, 19(R)
- 植物大战僵尸java圣诞版,植物大战僵尸2圣诞节版
- 色散关系与等离子体色散函数的解析性质
- python jpg压缩_python 实现图片批量压缩的示例
- 趋势外推预测 这一篇就够了(附上例题)~~~~~~~~~~~
- 自动控制系统的时域分析法——一阶系统的时域分析
- msk 频偏_数字调制MSK探究
- Mybatis新增数据后,报ERROR: Field * doesn‘t have a default value
- QT项目七:贪吃蛇游戏
- vmware12中安装winxp