xxl-job && datax-web 源码内容
问题
日志相关
- 日志文件是如何生成 ?
通过生成日志文件,追加日志。见附录 日志流程图 - 日志格式使用的是 logback.xml ?
否,代码写死,见 NtiJobLogger.java - 读取日志时如何从某行开始读取 ?
通过 io 流包装类,LineNumberReader.java
停止线程
- 直接使用 interrupt 能时线程停止 ?
能停止线程,process.waitFor()触发报中断异常,但是 datax 任务会执行任务结束 - 如何获取 Process process = Runtime.getRuntime().exec(command)的进程 id
通过 java.lang.UNIXProcess 获取 - 进程 id 如何返回管理平台
通过 ProcessCallbackThread 单独线程处理、平台提供 processCallback 接口进行回调
xxl-job 交互流程
- 如何选择执行器 ?
通过 TriggerParam 参数调用 Executor 的实现类 ExecutorBizImpl 的 run 方法进行判断,类型见 GlueTypeEnum - 运行参数是如何传递的 ?
通过 TriggerParam 参数 executorParams\replaceParam\jvmParam\replaceParamType\extendedParam 等属性进行传递
netty 相关
- demo 程序
- 封包解包&&粘包 ?
将消息分为消息头和消息体,消息头中包含表示信息的总长度(或者消息体长度)的字段 - 交互时:客户端发送服务端 / 服务端发送客户端 封包解包 区别 ?
TODO
附录
1、日志流程图
2、NtiJobLogger.java
1 | /** |
3、文件按行读取
1 | LineNumberReader reader = null; |
4、读取进程 id
1 | public static String getProcessId(Process process) { |
5、Executor 执行器类型
1 | BEAN("BEAN", false, null, null), |
实现类
- MethodJobHandler: bean 模式使用
- GlueJobHandler: groovy 使用
- ScriptJobHandler: isScript=true 使用