文章目录
有兴趣的小伙伴可以去看一下他的官网:分布式任务调度平台XXL-JOB (xuxueli.com)

XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
为什么要叫 XXL 呢?答:是因为他的作者的名字叫许雪里,使用了名字的缩写
分布式任务调度平台是什么呢?答:一个定时任务实现方案
在平时的业务场景中,经常有一些场景需要使用定时任务,比如:
时间驱动的场景:某个时间点发送优惠券,发送短信等等。批量处理数据:批量统计上个月的账单,统计上个月销售数据等等。固定频率的场景:每隔5分钟需要执行一次。所以定时任务在平时开发中并不少见,而且对于现在快速消费的时代,每天都需要发送各种推送,消息都需要依赖定时任务去完成,
在Java中,传统的定时任务实现方案,比如Timer,Quartz等都或多或少存在一些问题:
不支持集群、不支持统计、没有管理平台、没有失败报警、没有监控等等而且在现在分布式的架构中,有一些场景需要分布式任务调度:
同一个服务多个实例的任务存在互斥时,需要统一的调度。
任务调度需要支持高可用、监控、故障告警。
需要统一管理和追踪各个服务节点任务调度的结果,需要记录保存任务属性信息等。
显然传统的定时任务已经不满足现在的分布式架构,所以需要一个分布式任务调度平台,目前比较主流的是elasticjob和xxl-job。
跟xxl-job不同的是,elasticjob是采用zookeeper实现分布式协调,实现任务高可用以及分片。
xxl-job环境依赖于mysql,elasticjob依赖于ZooKeeper,这也是最大的不同。
elasticjob是无中心化的,通过ZooKeeper的选举机制选举出主服务器,如果主服务器挂了,会重新选举新的主服务器。因此elasticjob具有良好的扩展性和可用性,但是使用和运维有一定的复杂;xxl-job则相反,是通过一个中心式的调度平台,调度多个执行器执行任务,调度中心通过DB锁保证集群分布式调度的一致性,这样扩展执行器会增大DB的压力,但是如果实际上这里数据库只是负责任务的调度执行。但是如果没有大量的执行器的话和任务的情况,是不会造成数据库压力的。实际上大部分公司任务数,执行器并不多(虽然面试经常会问一些高并发的问题)。
相对来说,xxl-job中心式的调度平台轻量级,开箱即用,操作简易,上手快,与SpringBoot有非常好的集成,而且监控界面就集成在调度中心,界面又简洁,对于企业维护起来成本不高,还有失败的邮件告警等等。这就使很多企业选择xxl-job做调度平台。
我先讲一下xxl-job的运行原理(我自己的理解):xxl-job是一个网页,用来处理注册在里面的请求,并每过多长的时间(自己设置)就会传递一个值给springboot,这样就会出现一个问题:xxl-job要在局域网下才能连接成功。
向下面的docker安装方法,就是典型的例子,本地的服务(springboot)是连接不上服务器端的
为什么?:很简单个理由就是,在同一个网段下(本地),xxl-job可以给本地服务(springboot)发送服务;但如果xxl-job是在服务器上,那么你能跟他通信,但他不能给你通信,意思就是他ping你的ip是ping不通的
解决方法1:先在本地做测试的环境,服务器上的也做一样的配置,本地把服务(springboot)打包后,上传服务器,那么两个服务器直接就可以建立联系,或者上传到同一服务器上,组成服务器的本地环境
解决方法2:进入服务器上的xxl-job访问不了本地的,是因为本地不能被外网访问,那么就用内网穿透工具,让外网服务器可以访问本地端口就行
在这里我讲两种安装方式:



访问http://localhost:8080/xxl-job-admin/toLogin
进入管理页面。默认账号/密码:admin/123456。

不知道怎么做的朋友可以看(两者选其一看就行,第二种方法比较小白,我相信学到xxl-job的朋友这些都可以了解过,如果忘记了,看第一篇就好了):
使用Linux命令行发布springboot、javaWeb项目_我认不到你的博客-CSDN博客_linux springboot jar 发布
宝塔搭建SSM(Web项目也一样)和Springboot项目,超详细图解_我认不到你的博客-CSDN博客_宝塔怎么部署ssm redis项目
在配置好mysql的情况下,打成jar包,使用
java -jar jar包名字运行。


java -jar xxl-job-admin-2.4.0-SNAPSHOT.jar命令
http://localhost:8080/xxl-job-admin/toLogin
不知道怎么安装docker的小伙伴可以看看这篇:Linux(CentOS 7)安装Docker和Docker Compose,并配置docker镜像_我认不到你的博客-CSDN博客
xxl-job的表# 一、登录
# 登录mysql方式1 -p 后面不要有空格!!!!!!!!!!!!!!!!!!!!
mysql -u用户名 -p密码
# 登录mysql方式2
mysql -u用户名 -p # 回车后填写密码
# 二、创建字符集为 utf8mb4 的数据表 别忘了 ; !!!!!!!!!!!!!!!!!!!!!
CREATE DATABASE `xxl_job` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 三、查看表
SHOW DATABASES;
# 成功案例
# mysql> CREATE DATABASE `xxl-job` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# Query OK, 1 row affected (0.04 sec)
#
# mysql> SHOW DATABASES;
# +--------------------+
# | Database |
# +--------------------+
# | information_schema |
# | mysql |
# | performance_schema |
# | sql120_48_77_24 |
# | sys |
# | xxl-job |
# +--------------------+
# 6 rows in set (0.00 sec)
# 四、把sql导入
# 1、进入指定数据库
use xxl-job;
# 2、选中导入路径 source /路径/tables_xxl_job.sql;
source /www/wwwroot/tables_xxl_job.sql;
# 3、查看是否导入成功
show tables;
#成功案例
# mysql> show tables;
# +--------------------+
# | Tables_in_xxl_job |
# +--------------------+
# | xxl_job_group |
# | xxl_job_info |
# | xxl_job_lock |
# | xxl_job_log |
# | xxl_job_log_report |
# | xxl_job_logglue |
# | xxl_job_registry |
# | xxl_job_user |
# +--------------------+
# 8 rows in set (0.00 sec)
# 五、退出 mysql 编辑:键盘的 Ctrl+D
Ctrl+D
mysql> show databases;
mysql> use mysql;
mysql> update user set host = '%' where user = 'root';
mysql> select hosh,user from user;
mysql> exit
① 创建用户:CREATE USER 'xxl'@'%' IDENTIFIED BY '123456';
# 创建用户
mysql> CREATE USER 'username'@'host' IDENTIFIED BY 'password';
# 例子 dog 用户供所有人访问
mysql> CREATE USER 'xxl'@'%' IDENTIFIED BY '123456';
说明: username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器
② 授权:GRANT ALL ON xxl_job.* TO 'xxl'@'%';
# 授权
mysql> GRANT privileges ON databasename.tablename TO 'username'@'host'
# 例子
mysql> GRANT SELECT, INSERT ON test.user TO 'pig'@'%';
mysql> GRANT ALL ON *.* TO 'pig'@'%';
说明: privileges:用户的操作权限,如SELECT,INSERT,UPDATE等,如果要授予所的权限则使用ALL
databasename:数据库名 tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用表示,如.*
③ 完成用户的创建后,请记得刷新系统权限表;
mysql> flush privileges;
docker pull xuxueli/xxl-job-admin:2.3.0
docker run -d --name xxl-job-admin -p 4090:8080 \
-e PARAMS="\
--spring.datasource.url=jdbc:mysql://ip地址:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai \
--spring.datasource.username=xxl \
--spring.datasource.password=123456" \
-v /usr/local/xxl-job/admin/logs:/data/applogs \
--privileged=true \
--name xxl-job \
xuxueli/xxl-job-admin:2.3.0
[root@instance-yusr6p10 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ae7a23e761d9 xuxueli/xxl-job-admin:2.3.0 "sh -c 'java -jar $J…" About a minute ago Up About a minute 0.0.0.0:4090->8080/tcp, :::4090->8080/tcp xxl-job-admin
# 关闭防火墙;不推荐
systemctl top firewalld
命令含义:
–zone #作用域
–add-port=1935/tcp #添加端口,格式为:端口/通讯协议
–permanent #永久生效,没有此参数重启后失效
# 1、开启防火墙
systemctl start firewalld
# 2、开放指定端口(比如4090端口)
firewall-cmd --zone=public --add-port=4090/tcp --permanent
# 3、重启防火墙
firewall-cmd --reload
# 4、查看端口号
netstat -ntlp #查看当前所有tcp端口·
netstat -ntulp |grep 1935 #查看所有1935端口使用情况·
# 开放4090端口
/sbin/iptables -I INPUT -p tcp --dport 4090 -j ACCEPT
# 禁用端口
/sbin/iptables -I INPUT -p tcp --dport [port] -j DROP
# 指定ip开放端口
/sbin/iptables -I INPUT -h [ip] -p tcp --dport [port] -j ACCEPT
# 指定ip禁用端口
/sbin/iptables -I INPUT -h [ip] -p tcp --dport [port] -j DROP
# 查看现有设置
/sbin/iptables -L
# 清除现有设置
/sbin/iptables -F
-A INPUT -m state --state NEW -m tcp -p tcp --dport 4090 -j ACCEPT
service iptables restart
http://ip地址:4090/xxl-job-admin

<!-- xxl-job-core -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.3.1</version>
</dependency>
xxl:
job:
admin:
addresses: http://localhost:8080/xxl-job-admin
accessToken:
executor:
appname: zpa-job
#ip: 10.123.1.53
port: 9999
# 日志地址
logpath: /data/applogs/xxl-job/jobhandler
# 日志保存时间
logretentiondays: 30
@Configuration
@Slf4j
public class XxlJobConfig {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
/*@Value("${xxl.job.executor.ip}")
private String ip;*/
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppName(appName);
//xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
@Component
public class XxlDemoHandler {
@XxlJob("Demo")
public ReturnT<String> demo(){
String param = XxlJobHelper.getJobParam();
XxlJobHelper.log("测试开始");
System.out.println();
System.out.println();
System.out.println();
System.out.println(param);
System.out.println("测试完成!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
System.out.println();
System.out.println();
System.out.println();
XxlJobHelper.log("测试开结束");
return ReturnT.SUCCESS;
}
}
ipconfig




springboot:

xxl-job:



3千字带你搞懂XXL-JOB任务调度平台 (baidu.com)
1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
1.1.1 YARN的介绍 为克服Hadoop1.0中HDFS和MapReduce存在的各种问题⽽提出的,针对Hadoop1.0中的MapReduce在扩展性和多框架⽀持⽅⾯的不⾜,提出了全新的资源管理框架YARN. ApacheYARN(YetanotherResourceNegotiator的缩写)是Hadoop集群的资源管理系统,负责为计算程序提供服务器计算资源,相当于⼀个分布式的操作系统平台,⽽MapReduce等计算程序则相当于运⾏于操作系统之上的应⽤程序。 YARN被引⼊Hadoop2,最初是为了改善MapReduce的实现,但是因为具有⾜够的通⽤性,同样可以⽀持其他的分布式计算模
我正在尝试在我的远程服务器上运行以下命令(通过capistrano或ssh):bundleexecRAILS_ENV=productionscript/delayed_jobstart但我收到此错误消息:bundler:notexecutable:script/delayed_job以前从未见过这个,谷歌也没有适合我的东西。知道可能是什么问题吗? 最佳答案 也许它没有运行权限?尝试运行这个命令chmod+xscript/delayed_job然后再次执行文件。 关于ruby-on-rai
我是Ruby新手,并被要求在我们的新项目中使用它。我们还被要求使用Padrino(Sinatra)作为后端/框架。我们被要求使用Rspec进行测试。我一直在寻找可以指导在Padrino上使用RspecforRuby的教程。我得到的主要是引用RoR。但是,我需要RubyonPadrino。请在任何入门/指南/引用/讨论等方面指导我。如有不妥之处请指正。可能是我没有针对我的问题搜索正确的词/短语组合。我正在使用Ruby1.9.3和Padrinov.0.10.6。注意:我还提到了SOquestion,但它没有帮助。 最佳答案 我没用过Pa
文章目录1.任务背景2.任务目标3.相关知识点4.任务实操4.1安装配置JDK4.2启动FISCOBCOS4.3下载解压WeBASE-Front4.4拷贝sdk证书文件4.5启动节点4.6访问节点4.7检查运行状态5.任务总结1.任务背景FISCOBCOS其实是有控制台管理工具,用来对区块链系统进行各种管理操作。但是对于初学者来说,还是可视化界面更友好,本节就来介绍WeBASE管理平台,这是一款微众银行开源的自研区块链中间件平台,可以降低区块链使用的门槛,大幅提高区块链应用的开发效率。微众银行是腾讯牵头设立的民营银行,在国内民营银行里还是比较出名的。微众银行参与FISCOBCOS生态建设,一定
一、什么是MQTT协议MessageQueuingTelemetryTransport:消息队列遥测传输协议。是一种基于客户端-服务端的发布/订阅模式。与HTTP一样,基于TCP/IP协议之上的通讯协议,提供有序、无损、双向连接,由IBM(蓝色巨人)发布。原理:(1)MQTT协议身份和消息格式有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。MQTT传输的消息分为:主题(Topic)和负载(payload)两部分Topic,可以理解为消息的类型,订阅者订阅(Su
TCL脚本语言简介•TCL(ToolCommandLanguage)是一种解释执行的脚本语言(ScriptingLanguage),它提供了通用的编程能力:支持变量、过程和控制结构;同时TCL还拥有一个功能强大的固有的核心命令集。TCL经常被用于快速原型开发,脚本编程,GUI和测试等方面。•实际上包含了两个部分:一个语言和一个库。首先,Tcl是一种简单的脚本语言,主要使用于发布命令给一些互交程序如文本编辑器、调试器和shell。由于TCL的解释器是用C\C++语言的过程库实现的,因此在某种意义上我们又可以把TCL看作C库,这个库中有丰富的用于扩展TCL命令的C\C++过程和函数,所以,Tcl是
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:FlashMessagesinPartials(Rails3)我正在做MichaelHartl的Railstutorial和listing7.26将flash消息添加到应用程序布局:...">...这很好用。但是,我试图通过在我的部分文件夹中创建一个_flash.html.erb来清理这段代码...">-->...并且比使用......在我的应用程序布局中,我的所有Rspec测试开始失败,每个测试都显示以下消息:Failure/Error:before{visitsignup_path}ActionView:
我实在是无计可施了。我不明白为什么它不起作用。我创建了一个类,我使用rake命令对其进行调用和排队。当我使用“rakejobs:work”运行worker并调用命令“rakeget_updates”时,它执行得很好。但是,当我将worker作为守护进程运行时(RAILS_ENV=productionbin/delayed_jobstart)并调用命令“rakeget_updates”时,它会产生错误。app/workers/get_updates.rbclassGetUpdatesdefperformbeginning=Time.nowincludeSoapHelperrequire'