xxl-job源码亮点学习

283 阅读2分钟

1. 概念地址

官网:www.xuxueli.com/xxl-job/#1.…

访问地址:http://1.117.109.40:8080/xxl-job-admin/

docker 命令:docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://1.117.109.40:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai --spring.datasource.username=root --spring.datasource.password=dyw862749167" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:2.3.0

docker pull xuxueli/xxl-job-admin:2.3.0

学习参考资料:www.bilibili.com/video/BV1tb…

juejin.cn/post/732986… 分析的比较好,但是不太细节的一篇文章

2. 过程遇到的问题分析

2.1 不能自动注册OnLine 机器地址

xxl.job.accessToken=dywtest 执行器和调度器不一致

xxl.job.admin.addresses=http://192.168.1.101:8080/xxl-job-admin

xxl.job.executor.port=9998 执行器的端口号需要穿透防火墙

xxl.job.executor.appname=dyw-xxl-job-executor-sample 和调度中心保持一致

3 . 乐观锁的实现

image.png

4 . 在一个死循环中控制它的执行时间

image.png

5 . 常见获取容器和策略模式使用方法的实现

image.png

6 . 策略模式结合枚举的应用

image.png

7 . 故障转移如何判断机器故障---发送心跳

image.png

image.png

image.png

8 . 线程池的写法

image.png

9 . 数据库分布式锁的应用

image.png

10 . 并发的生产消费模型

image.png

11 . 超时算法

private volatile ConcurrentMap<Integer, AtomicInteger> jobTimeoutCountMap = new ConcurrentHashMap<>();

image.png

12 . ip 相关工具类

image.png

13 . netty 的handler中引入多线程来处理并发任务

image.png

14 . JobHandler 初始化过程学习

我们项目中的xxljob注解修饰的方法都会成为一个jobhandler, 最终的结果是组装成

private static ConcurrentMap<String, IJobHandler> jobHandlerRepository = new ConcurrentHashMap<String, IJobHandler>();

image.png

15 . 如何停止一个线程

private volatile boolean toStop = false;

private String stopReason;

image.png

16 . 触发器回调线程写结果的逻辑

静态方法写入LinkedBlockingQueue

image.png

TriggerCallbackThread start 方法开启两个线程 image.png

17 . 批量回调机制

打包批量回调结果,减少网络请求的次数

18 . 中断线程的方式

interrupt只是发起一个中断信号,并不会中断线程的运行

19 . 乐观锁锁日志的做法

通过类似版本号的操作来更新我们的日志,也可以利用上我们调度中心对进程并发出的能力 image.png

image.png

20 . 策略模式的运用

一般就是一个接口,定义你要的功能

然后就是一群具体的实现类,代表不同的类型

然后我们还有一个manager 来管理这些策略

image.png

image.png