将 DataX 执行结果通过钉钉上报
在上文《使用 Docker 运行 DataX 定时全量备份关键数据表》中我们知道了如何运行 DataX 备份程序,接下来我们实现将任务执行结果通过钉钉自定义机器人通知。
DataX 的 Hook 机制
DataX 的代码库,在“common/src/main/java/com/alibaba/datax/common/spi/Hook.java”类中定义了开放的接口:
在“core/src/main/java/com/alibaba/datax/core/container/util/HookInvoker.java”类中使用 ServiceLoader 机制加载并 Hook 的实现类。
在“core/src/main/java/com/alibaba/datax/core/job/JobContainer.java”类中,当任务结束后调用“HookInvoker”执行了所有的 Hook:
其中,“configuration”为对应 job 的 json 配置信息,“comm.getCounter()”存放相关的执行统计。 我们通过实现 Hook 接口,就可以拿到相应的信息。
实现 Hook
新建一个项目,将 DataX 的“datax-common-0.0.1-SNAPSHOT.jar”和钉钉的“taobao-sdk-java-auto_1479188381469-20210528.jar”加入到 classpath 中。
然后编写继承 Hook 接口的实现类:DingTalkReport。
打包
假定包名为:com.bz.datax.hook,在 resources 下创建目录“META_INF/services”,在 services 文件夹下,新建文件“com.alibaba.datax.common.spi.Hook”,文件内容为 Hook 接口实现类的路径。
然后通过 idea 打包即可。
集成 Hook
引入 Hook 实现包
在 DataX 根目录下,新建“hook”文件夹,然后在其下创建“dingtalk”文件夹(也可自定义其他名字),将我们打包好的 jar 包放到“dingtalk”文件夹下。
新增 job 配置
接入钉钉自定义机器人,需要引入额外的配置信息,我们可以在 job 任务描述文件新增钉钉的配置参数“dingTalkReporter”,利用 configuration 类提取即可。
其中 accessToken、title 为必填,secret 为选填。
启动效果:
通知效果:
参考
完整项目代码参加 Github:https://github.com/mchange/datax-dingtalk-report
钉钉自定义机器人接入文档:https://developers.dingtalk.com/document/app/custom-robot-access
版权声明: 本文为 InfoQ 作者【白粥】的原创文章。
原文链接:【http://xie.infoq.cn/article/68102f356019f52560f4b8c70】。文章转载请联系作者。
评论