欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

记一次 XxlRpcException:xxl-rpc request timeout at 超时问题

程序员文章站 2022-03-20 16:55:22
事件起因 昨天有同事找我到,说他搭建的 XXL JOB 任务调度系统不能工作了,调用总是出错(服务端返回 500)希望我能帮忙处理一下,不过说实话我也没有搭建过 XXL JOB 的经验,但是既然同事请求了,就只能硬着头皮帮忙一起看下,解决的过程还算比较顺利,但是发现网上这块的资料很少,所以打算把解决 ......
事件起因

昨天有同事找我到,说他搭建的 xxl-job 任务调度系统不能工作了,调用总是出错(服务端返回 500)希望我能帮忙处理一下,不过说实话我也没有搭建过 xxl-job 的经验,但是既然同事请求了,就只能硬着头皮帮忙一起看下,解决的过程还算比较顺利,但是发现网上这块的资料很少,所以打算把解决过程用博客记录下来,希望可以帮助到遇到同样问题的同学们

解决过程

同事跟我说起初怀疑是 shiro 拦截了定时任务的请求,但是他注释了 shiro 相关的代码后,xxl-job 的请求还是无法成功(请求成功一次后,再次请求就出现标题的超时错误),然后我查看了 xxl-job 的请求日志,服务端的 http 返回码是 500,错误日志是 xxlrpcexception: xxl-rpc, request timeout at ,基本排除了是 shiro 认证导致的问题,原因是因为 shiro 是认证框架,认证不通过的话,返回的错误码应该是 401 unauthorized 类的异常,但是从 xxl-job 的日志显示这明显是通信错误,难道是某个相关的服务被关了?

带着这个疑问我去查了下 xxl-job 的文档,项目要使用 xxl-job 的调用,就会引入的 xxl-job-core 包,xxl 客户端项目就会在启动时使用占用一个端口监听并且消费 xxl-job 发过来的调用(我们设置的端口是 9999),我尝试启动项目后观察端口占用情况,项目启动后端口 9999 是正常启用的,然后在我使用 xxl-job 手动执行启动后(第一次请求是成功的),然后我再查看端口情况,发现 9999 端口就已经关闭了,所以问题在这里已经被找到了, 客户端项目的 xxl 监听端口被关闭,导致后续 xxl-job 请求都无法响应,自然也就请求超时,但是这明显不像是程序问题,因为以前没出现过。近期才开始出现。于是我通过搜索引擎找到了 xxl-job 官方在 github 的 issue ,通过 issue 的内容看到官方已经告知是版本的 bug,并且在新版中这个 bug 已经修复,以下是我使用的版本信息

<dependency>
    <groupid>com.xuxueli</groupid>
    <artifactid>xxl-job-core</artifactid>
    <version>2.0.0</version>
</dependency>

并且我发现这个版本在 mvnrepository 也几乎没人用

记一次 XxlRpcException:xxl-rpc request timeout at  超时问题

我果断的把客户端的 xxl-job-core 升级到官方推荐的最新版,代码如下:

<dependency>
    <groupid>com.xuxueli</groupid>
    <artifactid>xxl-job-core</artifactid>
    <version>2.0.0</version>
</dependency>

然后启动项目,在 xxl-job 手动执行任务,查看端口情况,问题解决。。
更多技术咨询,请关注公众号,find me !
记一次 XxlRpcException:xxl-rpc request timeout at  超时问题