接入问题
更新时间:
复制 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,说明存在问题。
# 宿主机
[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-core的2.0.x版本或者更低的版本升级到新的SDK,同一个IP会出现两个Executor。
在执行器列表中,该IP同时显示为两条独立记录,端口分别为10000和9999,状态均为在线。
原因是新的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())
该文章对您有帮助吗?