xxl-job 执行器自动注册无机器地址问题(达梦数据库)

1、问题描述

最近项目上用到了 xxl-job 的分布式任务调度平台,但是使用时发现,在创建执行器时,根据官网文档进行操作,使用自动注册的方式,但是机器地址一直是空的,也就是执行器一直没有注册进来。


image.png

我们的这个项目用的是达梦数据库

2、原因分析

1)、首先看日志,启动日志说明执行器是正常创建了的


image.png

2)、网上出现很多这种问题,我也根据网上博客来操作,结果也是不行

  • 首先是配置问题,配置的执行器名称要和创建的执行器名称一致


    image.png

    image.png
  • 然后说是网络设置,要把其它的网络禁用,本机只有一个IP


    image.png

    image.png

3)、用示例的执行器来进行注册
我这个项目使用的是 2.3.1 版本的 xxl-job,我根据官网的步骤,新下载代码,进行执行器的注册,发现是正常的


image.png
  • 我找了注册执行器的源码


    image.png
  • 发现执行注册器的保存是没问题的,但是每次保存后都马上又给删了;


    image.png
  • 然后我开始找判断注册器失效的代码,判断失效的逻辑是 90 秒如果没有更新时间,就认为这个注册器失效了;


    image.png
  • 问题就是这个方法:
    ···
    <select id="findDead" parameterType="java.util.HashMap" resultType="java.lang.Integer" >
    SELECT t.id
    FROM xxl_job_registry AS t
    WHERE t.update_time <![CDATA[ < ]]> (#{nowTime} - #{timeout} / 24/60/60 )
    </select>
    ···
    因为我们项目用的是达梦数据库,所以这里查询 小于 更新时间 90 秒的逻辑用的是达梦的语法,但是当时是直接从网上找的,没有详细测试,这里其实不对,可能是因为达梦8的原因,正确的修改方法如下:
    ···
    SELECT t.id
    FROM xxl_job_registry AS t
    WHERE t.update_time <![CDATA[ < ]]> timestampadd(SECOND, -#{timeout}, sysdate )
    ···
    终于好了!


    image.png

3、反思

我觉得主要是要反思自己的排查流程,为什么这么慢才找到问题
1)、xxl-job 的 sql 日志没打开,导致排查的时候一直在看代码,debug 代码并没看到核心的SQL日志;
2)、没有及时看xxl-job 官网,这里的架构图上明确的标明了有注册服务,应该直接去找注册服务部分代码,看是如何注册的,才能快速定位问题!


image.png
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容