[xuxueli/xxl-job]2.0.0的新特性任务结果丢失处理在手动注册时存在问题

2020-07-14 215 views
8
Which version of XXL-JOB do you using?

2.2.0

Expected behavior

任务执行时长超过10分钟,正常执行成功的,不应该收到报警:任务结果丢失,标记失败。

Actual behavior

手动注册时,输入注册ip如http://10.0.0.1 ,注册进xxl_job_registry表的地址会变成 http://10.0.0.1/ 如果任务执行时长超过10分钟,会触发心跳检查,该任务在xxl_job_log表中executor_address是 http://10.0.0.1 无法匹配到xxl_job_registry中的http://10.0.0.1/ ,因此心跳检查失败,触发报警:任务结果丢失,标记失败。但实际任务是执行成功的。

回答

2

我遇到了同样的问题。 在我的任务执行到1个小时后,【调度日志】中的任务【执行结果】显示:失败,【执行备注】中显示:任务结果丢失,标记失败。但可以从我们日志系统中发现任务仍在执行,说明任务正在运行当中,所以调度中心中的调度日志存在问题。

4

按你的描述,看来并不是什么自动注册的问题

8

是的,按照目前的版本貌似并没有调用执行器的心跳,导致一段时间之后从可用服务中踢出

7

是手动注册才会高频出现这个问题的,自动注册时正常的

5

心跳时,如果执行器未配置address,则会自动生成地址,此时是带有 / 的

// generate address if (address==null || address.trim().length()==0) { String ip_port_address = IpUtil.getIpPort(ip, port); // registry-address:default use address to registry , otherwise use ip:port if address is null address = "http://{ip_port}/".replace("{ip_port}", ip_port_address); }

所以手动注册的地址最好带上 /

可避免楼主的问题

5

心跳时,如果执行器未配置address,则会自动生成地址,此时是带有 / 的

// generate address if (address==null || address.trim().length()==0) { String ip_port_address = IpUtil.getIpPort(ip, port); // registry-address:default use address to registry , otherwise use ip:port if address is null address = "http://{ip_port}/".replace("{ip_port}", ip_port_address); }

所以手动注册的地址最好带上 /

可避免楼主的问题

测试手动注册地址带上 / 能解决这个问题

2

我是ip:端口/,在端口后面添加了一个/,还是会有这个问题

8

我是ip:端口/,在端口后面添加了一个/,还是会有这个问题

我测试的情况是,手动注册的执行器(以/结尾),会偶现这个问题。后来我全部换成自动注册的执行器,目前没遇到这个问题了

5

自从2.0.0版本之后,官方提供了Docker镜像,admin在容器中运行,执行器不在容器中运行,执行器的Address能自动注册到Admin。大家是不是也把执行器打包成镜像发布,如果执行器在容器中运行,admin通过手动注册是可以访问executor的IP,但是executor自动注册的IP是容器的内部IP,admin是访问不到的,结果就造成了自动注册和手动注册的IP不一致,会出现上述问题。官方最新版还没有测试过执行器通过镜像运行的情况。

容器内的IP是http://172.开头的,手动填的IP是192.168.开头的