接入问题

更新时间:
复制 MD 格式

本文旨在为您介绍在使用任务调度实例版(XXL-JOB)时,遇到的接入相关问题,通过详细解析这些问题,您将能够更好地理解和解决在接入过程中可能遇到的问题,确保任务调度系统的稳定运行。

域名解析错误,报错java.net.UnknownHostException

XXL-JOB的域名使用的是privatezone,需要使用100.100.2.136和100.100.2.138,如果您修改过路由或者DNS配置,需要将这两个IP的路由规则删除后,以确保域名能够自动解析到。

您可以使用Dig域名的方式来定位,如下图所示,Dig域名返回的DNS服务器地址是114.114.114.114,说明存在问题。

image

使用CEN打通网络,另一个VPC无法解析域名

提工单联系研发同学,将privatezone映射到其他VPC中。

使用运营商专线打通网络,在自建IDC或者办公网无法解析域名

详见转发管理。

从2.0.x版本升级到新的SDK版本,同一个IP会出现两个Executor

如果从xxl-job-core的2.0.x版本或者更低的版本升级到新的SDK,同一个IP会出现两个Executor。如下图:

image

原因是新的SDK中XxljobExecutor的初始化逻辑发生变化,以下代码需要去除Bean中的initMethod和destroyMethod,否则XxlJobSpringExecutor将会调用两次start。

@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
    logger.info(">>>>>>>>>>> xxl-job config init.");
    XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
    xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
    xxlJobSpringExecutor.setAppName(appName);
    xxlJobSpringExecutor.setIp(ip);
    xxlJobSpringExecutor.setAccessToken(accessToken);
    xxlJobSpringExecutor.setLogPath(logPath);
    xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

    return xxlJobSpringExecutor;
}

如何处理nodejs版本的SDK接入存在无法接受应答的问题

步骤一:
import type { Request, Response, NextFunction } from 'express'
const JSONbig = require('json-bigint');

步骤二:
/**
 * Safe JSON parsing middleware that preserves large integers as strings
 * This prevents precision loss for large logId values that exceed Number.MAX_SAFE_INTEGER
 */
const safeJsonMiddleware = function () {
  return (req: Request, res: Response, next: NextFunction) => {
    if (req.is('application/json')) {
      let body = ''
      req.setEncoding('utf8')
      
      req.on('data', (chunk) => {
        body += chunk
      })
      
      req.on('end', () => {
        try {
          // 使用 JSONbig.parse() 而不是 JSON.parse()
          // 'storeAsString: true' 会将大数解析为字符串
          // 如果想解析为 BigInt,可以使用 'useNativeBigInt: true'
          req.body = JSONbig({ storeAsString: true }).parse(body);
          next();
        } catch (e) {
          // 如果解析失败,返回错误
          res.status(400).send('Invalid JSON');
        }
      })
      
      req.on('error', next)
    } else {
      next()
    }
  }
}

步骤三:
app.use(safeJsonMiddleware())

执行任务失败或报错 connect timed out 如何排查?

执行任务失败并报错 connect timed out 或 xxl-rpc remoting error,通常由执行器配置参数错误、网络不通或执行器未成功注册导致。按以下步骤逐项排查:

  1. 检查执行器配置参数

    确认执行器配置文件中以下三个参数值与控制台显示一致:

    参数

    说明

    控制台查看位置

    xxl.job.admin.addresses

    SchedulerX Server 地址,执行器通过此地址向 Server 注册

    XXL-JOB 实例 → 基础信息 → 网络接入信息,复制 VPC 专有网络或公网接入点地址

    xxl.job.executor.appname

    执行器注册时与应用关联的唯一标识,须与控制台应用 AppName 完全一致

    XXL-JOB 实例 → 应用管理 → 对应应用的 AppName 列

    xxl.job.accessToken

    执行器注册时的鉴权标识,须与 Server 端保持一致

    XXL-JOB 实例 → 应用管理 → 单击对应应用的编辑,查看 AccessToken 字段值

    说明

    若使用公网接入点,需先在基础信息页面单击开启公网访问完成开通。

  2. 检查网络连通性

    确认执行器所在网络环境到 SchedulerX Server 的网络正常:

    • 检查安全组规则,确认已放行执行器到 Server 端口(通常为 8080)的出入站流量。

    • 检查 VPC 网络配置和 ACL 规则,确认没有阻断对应端口的流量。

    • 查看执行器本地日志,确认是否有类似 xxl-job executor register success 的注册成功记录。若无此日志,说明执行器与 Server 的注册通道不通,需重点排查网络和配置参数。

  3. 手动验证网络连通性

    在能访问执行器 IP 的网络环境中,执行以下命令测试端口连通性:

    curl -X POST http://<执行器IP>:<端口>/run

    若有响应(即使返回错误码),说明网络通路正常,问题在于参数配置或业务逻辑;若请求超时,说明网络不通,需进一步检查安全组、防火墙和路由规则。

  4. 排查服务端实例状态

    若以上检查均正常但仍持续报错,请提交工单联系技术支持,由研发同学排查服务端实例状态。

SchedulerX 中 XXL-JOB 类型任务调用失败但 Java 任务正常怎么办?

在 SchedulerX 混合调度场景下,XXL-JOB 类型任务调用失败但同一执行器上的 Java 类型任务可以正常运行,通常由 SDK 依赖缺失或版本不兼容导致。按以下步骤逐项排查:

  1. 确认已引入阿里云 XXL-JOB 插件依赖

    SchedulerX 对 XXL-JOB 类型任务的支持需要引入阿里云提供的 XXL-JOB 插件依赖,而不仅使用 XXL-JOB 官方开源依赖。确认项目依赖配置中已包含阿里云 XXL-JOB 插件包。

  2. 检查 XXL-JOB 依赖版本兼容性

    确认引入的阿里云 XXL-JOB 插件版本与当前 SchedulerX SDK 版本兼容。参考官方插件版本说明,将依赖调整到推荐版本后重新部署执行器。

  3. 尝试使用 Class 全路径方式定义任务

    如果使用注解打标方式(如 @XxlJob)定义任务,建议尝试改为直接使用 Class 全路径方式:在控制台任务配置中,将任务处理器填写为处理类的完整类名(如 com.example.handler.DemoJobHandler),而非注解标识名。

  4. 检查代码包名是否发生变更

    若任务曾经正常运行后出现调用失败,检查近期代码重构或包名调整是否导致处理类路径发生变更。对比同一执行器上 Java 任务成功运行的配置与 XXL-JOB 类型任务失败的配置差异,确认任务处理类路径是否一致。

  5. 评估迁移至专用 XXL-JOB 实例

    若以 XXL-JOB 为主要调度方式,且持续遇到兼容性问题,建议评估以下方案:

    • 将工作负载迁移至任务调度实例版(XXL-JOB),在专用实例上使用原生 XXL-JOB 协议,避免混合调度的兼容性问题。

    • 或调整项目依赖引入位置,确保阿里云 XXL-JOB 插件在依赖树中优先加载。

若排查后仍无法解决,提交工单时请附上 XXL-JOB 类型任务失败的完整错误日志,以及同一执行器上 Java 任务成功运行的日志,便于技术支持快速定位问题根因。