1. 概念地址
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
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 . 乐观锁的实现
4 . 在一个死循环中控制它的执行时间
5 . 常见获取容器和策略模式使用方法的实现
6 . 策略模式结合枚举的应用
7 . 故障转移如何判断机器故障---发送心跳
8 . 线程池的写法
9 . 数据库分布式锁的应用
10 . 并发的生产消费模型
11 . 超时算法
private volatile ConcurrentMap<Integer, AtomicInteger> jobTimeoutCountMap = new ConcurrentHashMap<>();
12 . ip 相关工具类
13 . netty 的handler中引入多线程来处理并发任务
14 . JobHandler 初始化过程学习
我们项目中的xxljob注解修饰的方法都会成为一个jobhandler, 最终的结果是组装成
private static ConcurrentMap<String, IJobHandler> jobHandlerRepository = new ConcurrentHashMap<String, IJobHandler>();
15 . 如何停止一个线程
private volatile boolean toStop = false;
private String stopReason;
16 . 触发器回调线程写结果的逻辑
静态方法写入LinkedBlockingQueue
TriggerCallbackThread start 方法开启两个线程
17 . 批量回调机制
打包批量回调结果,减少网络请求的次数
18 . 中断线程的方式
interrupt只是发起一个中断信号,并不会中断线程的运行
19 . 乐观锁锁日志的做法
通过类似版本号的操作来更新我们的日志,也可以利用上我们调度中心对进程并发出的能力
20 . 策略模式的运用
一般就是一个接口,定义你要的功能
然后就是一群具体的实现类,代表不同的类型
然后我们还有一个manager 来管理这些策略