接入问题

更新时间:
复制 MD 格式

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

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

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

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

# 宿主机
[root@iZwz94vuii7iq293sve16bZ ~]# dig xxljob-08108af4c68.schedulerx.mse.aliyuncs.com

; <<>> DiG 9.11.36-RedHat-9.11.36-16.0.1.al8 <<>> xxljob-08108af4c68.schedulerx.mse.aliyuncs.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 61913
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;xxljob-08108af4c68.schedulerx.mse.aliyuncs.com. IN A

;; ANSWER SECTION:
xxljob-08108af4c68.schedulerx.mse.aliyuncs.com. 10 IN A 172.18.153.132
xxljob-08108af4c68.schedulerx.mse.aliyuncs.com. 10 IN A 172.18.153.133

;; Query time: 1 msec
;; SERVER: 100.100.2.136#53(100.100.2.136)
;; WHEN: Wed Oct 30 16:52:33 CST 2024
;; MSG SIZE  rcvd: 96

# docker 内
[root@iZwz94vuii7iq293sve16bZ ~]# docker exec -it scm-service-supplier bin/bash
[root@iZwz94vuii7iq293sve16bZ /]# dig xxljob-08108af4c68.schedulerx.mse.aliyuncs.com

; <<>> DiG 9.11.36-RedHat-9.11.36-16.0.1.al8 <<>> xxljob-08108af4c68.schedulerx.mse.aliyuncs.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 34811
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;xxljob-08108af4c68.schedulerx.mse.aliyuncs.com. IN A

;; AUTHORITY SECTION:
mse.aliyuncs.com.       436     IN      SOA     hidden-master.aliyun.com. hostmaster.aliyun-inc.com. 2021319143 7200 900 2592000 600

;; Query time: 36 msec
;; SERVER: 114.114.114.114#53(114.114.114.114)
;; WHEN: Wed Oct 30 16:52:44 CST 2024
;; MSG SIZE  rcvd: 176

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

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

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

详见转发管理

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

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

在执行器列表中,该IP同时显示为两条独立记录,端口分别为100009999,状态均为在线

原因是新的SDKXxljobExecutor的初始化逻辑发生变化,以下代码需要去除Bean中的initMethoddestroyMethod,否则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())