1. 问题思考
xxl-job调度中心支持集群部署,如果保证集群部署-调度中心”-不会重复发起对同一个执行器的调度请求?
【猜想】
因为调用中心集群部署,各节点需要连接同一个'调度数据库'实例。
使用 数据库层面的分布式锁(锁粒度为 具体执行器)---调度中心先获取分布式锁,再执行调度执行逻辑。
【验证】执行器自动注册到调度中心;心跳保持、更新连接状态;执行器下线从调度中心剔除代码细节?
答:“调度中心”发起调度请求,“执行器”负责接收调度请求并执行对应的JobHandler中业务逻辑。 这里RPC调用,使用的是dubbo吗?还是其他具体实现?
答:
1> ‘执行器’ 与 ‘任务’ 之前关系为 1对多
例如点餐项目中 shop模块 就是一个执行器,执行器名字叫“xxl-job-executor-shop”,在这个执行器下面只有一个【BEAN:ShopAutoDispatchOrderTask】自动派单任务。
2> 这里的RPC并未使用dubbo框架,而是自研RPC(xxl-rpc)。调度中心---RPC---> 执行器,如果保证RPC调用的安全性(伪造调用中心调用如何避免)?
答:5.6.2 调度中心向执行器发送的调度请求时使用RequestModel和ResponseModel两个对象封装调度请求参数和响应数据, 在进行通讯之前底层会将上述两个对象对象序列化,并进行数据协议以及时间戳检验,从而达到数据加密的功能;