xxl-job闭坑指南

news/2024/5/18 21:33:28 标签: xxl-job, 指南, , .net, 教程

        好多年前公司就用xxl-job了,最近自己搞了下,执行器使用的一个.net库。挺多的,目前看xxl-job还是个人维护的,总有不完善的地方。记录下,也作为自己的总结。

一、调度中心

        我用Docker镜像方式搭建的。
1,pull镜像的
        一般镜像都用latest标签标记最新版本,Docker默认也是拉取打了latest标签的版本。但是xxl-job调度中心镜像没有打这个标签,所以只能拉取指定标签。
        看https://github.com/xuxueli/xxl-job/ Releases最新版本是2.4.0,猜测镜像标签也是2.4.0。果然。

2,xxl.job.accessToken的
        xxl.job.accessToken默认不是空,默认是“default_token”。详情见 xuxueli/xxl-job@390165d

        下面是我启动容器的命令,注意每个PARAMS配置项都需要“--”开头。也可以通过修改配置文件的方式指定参数,参见我同事的文章
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://XXXX:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai  --spring.datasource.username=root  --spring.datasource.password=123456  --spring.mail.username=XXXX  --spring.mail.password=XXXX --xxl.job.accessToken=XXXX" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d --restart=always xuxueli/xxl-job-admin:2.4.0


二、执行器项目

1,执行器是什么的
        看调度中心中执行器是一个模块,任务是一个模块,并且任务可以自由选择执行器。让人不禁以为执行器和任务是完全解耦的,是两个东西。自己还以为执行器把任务拉到自己服务器上执行呢。搜了几篇xxljob原理的文章,逐渐明白了。下面是讲的比较好的两篇,推荐全文阅读,对xxl-job会有更深入的了解。

                https://cloud.tencent.com/developer/article/2367296

                https://zhuanlan.zhihu.com/p/36627346

        看完终于知道“任务就是你要执行的业务代码,函数。执行器就是任务所在程序部署的服务。”

        那么任务和执行器必然是在一起的。那么为什么任务可以选择不同执行器呢?是因为同一套执行器代码部署多台服务器的时候,指定成不同的执行器,就可以实现在不同机器上执行不同任务。比如一套代码里有任务A,任务B,我可以发布到两台机器上分别配置成执行器a ,执行器b。那调度中心我可以任务A选择执行器a,任务B选择执行器b。一套代码不同配置(要注册成两个执行器),一台机器上永远执行任务A,一台机器上永远执行任务B。任务A需要大内存,任务B需要大网络流量,就可以针对性的配置服务器。

        任务并不能任意选择执行器,只能选择包含这个任务的执行器。

2,执行器实现的.net实现)
        .net 实现xxl-job执行器,星星最多的是https://github.com/xuanye/DotXxlJob。并且目标框架是.NET Standard。还提供了一个案例,可以直接用来测试。 

1:配置adminAddresses  不能要url最后的"/",
2:调度中心xxl.job.accessToken默认值是“default_token”了,注意配置。
3:执行器注册成功,但是调度中心不显示执行器。这里有解释:https://github.com/xuanye/DotXxlJob/issues/6,
“在admin后台录入一个执行器,选择自动注册,(其实是添加一类执行器)。

然后再执行器配置对应的appName 就能实现执行器的自动注册 (注册具体的机器)”

        说好的自动注册就这?是执行器实现的问题还是xxl-job就这么设计的呢?
        官方文档中执行器注册提交的内容如下
    {
        "registryGroup":"EXECUTOR",                     // 固定值
        "registryKey":"xxl-job-executor-example",       // 执行器AppName
        "registryValue":"http://127.0.0.1:9999/"        // 执行器地址,内置服务跟地址
    }
        没有指定执行器名称的地方。所以应该是xxl-job就这么设计的。
        可以修改下源码,在注册执行器的地方加下控制台输出或者日志,就能知道注册执行器提交的内容和返回内容了。

        注册执行器的时候,没有对应AppName的执行器(控制台中的执行器),竟然也能注册成功,也算一个吧。

下面是几点需要注意的。
1,一套执行器代码部署多台服务器,但是使用同一个appname就可以注册到一个执行器(控制台中的执行器)中实现负载。每次任务执行的时候,首先会根据这个任务找到对应的执行器(控制台中的执行器),根据一些路由的策略选中一台机器,触发执行器的任务执行。

2,调度中心调用执行器走http协议,所以执行器服务需要部署为一个Http服务

3,分片广播,每个执行器怎么知道只执行自己的部分?
        调度中心知道一个执行器有几个实例,会告诉每个实例当前执行器的分片序号和分片总数。jobhandler中能拿到这两个参数,然后自己写代码实现。


http://www.niftyadmin.cn/n/5292122.html

相关文章

在Adobe Acrobat上如何做PDF文档签名

Adobe Acrobat如何做PDF文档签名?PDF文档签名是指对PDF文档进行基于证书的数字签名,类似于传统的手写签名,可标识签名文档的人员。与手写签名不同,数字签名难以伪造,因为其包含签名者唯一的加密信息。为PDF文档进行基于…

日志框架简介-Slf4j+Logback入门实践 | 京东云技术团队

前言 随着互联网和大数据的迅猛发展,分布式日志系统和日志分析系统已广泛应用,几乎所有应用程序都使用各种日志框架记录程序运行信息。因此,作为工程师,了解主流的日志记录框架非常重要。虽然应用程序的运行结果不受日志的有无影…

2.5 C语言之类型转换

2.5 C语言之类型转换 一、类型转换 一、类型转换 当一个运算符的几个操作数类型不同时,就需要通过一些规则把它们转换为某种共同的类型。 一般来说,自动转换是指把“比较窄的”的操作数转换为“比较宽的”的操作数,并且不丢失信息的转换。例…

紫光展锐5G扬帆出海 | 东南亚成为5G新热土

东南亚是一块充满活力和潜力的市场,这里人口基数大、年轻消费群体占比高,电子市场在过去几年显著增长。 增速“狂飙”的东南亚手游 近年来,东南亚手游下载量逐年增长,2023 年第一季度下载量突破 21 亿次,贡献了全球近…

SpringBoot 项目中常用的注解

每一层对应每个包,包名中应全为小写。 一、Common 层(实体类) 前提:导入 Lombok 依赖 Data:生成 get 和 set 方法以及 toString 方法 Getter:只生成 get 方法,避免对类中的成员变量修改。 …

JMeter逻辑控制器之While控制器

JMeter逻辑控制器之While控制器 1. 背景2.目的3. 介绍4.While示例4.1 添加While控制器4.2 While控制器面板4.3 While控制器添加请求4.3 While控制器应用场景 1. 背景 存在一些使用场景,比如:某个请求必须等待上一个请求正确响应后才能开始执行。或者&…

python的WebSocket编程详解,案例群聊系统实现

1.websocket相关 1.1为什么要用websocket 如果有需求要实现服务端向客户端主动推送消息时(比如聊天室,群聊室)有哪几种方案 轮训:让浏览器每隔两秒发送一次请求,缺点:有延时,请求太多网站压力…

根据commitID删除某一次提交

1.查看提交历史 git log --prettyoneline2.找到需要删除的那个commit,然后找到上次提交的commitID 比如想要删除下面这一条 我们找到上次提交的commitID 3.执行rebase git rebase -i efa11da0a684977bf8ac047ebb803e2ded2063a4 进入编辑状态显示如下 将需要删除的那个提交前…