记一次 XxlRpcException:xxl-rpc request timeout at 超时问题
事件起因
昨天有同事找我到,说他搭建的 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 https://github.com/xuxueli/xxl-job/issues/586 ,通过 issue 的内容看到官方已经告知是版本的 BUG,并且在新版中这个 BUG 已经修复,以下是我使用的版本信息
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>2.0.0</version>
</dependency>
并且我发现这个版本在 mvnrepository 也几乎没人用

我果断的把客户端的 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 超时问题的更多相关文章
- golang micro client 报错500 {"id":"go.micro.client","code":408,"detail":"call timeout: context deadline exceeded","status":"Request Timeout"}
go micro web端连接services时,第一次访问提示500(broken pipe),排查发现客户端请求services时返回 {"id":"go.micro ...
- error connecting: Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
[参考]Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置 [参考][数据库-MySql] MySqlConnection error connec ...
- java 从零开始手写 RPC (07)-timeout 超时处理
<过时不候> 最漫长的莫过于等待 我们不可能永远等一个人 就像请求 永远等待响应 超时处理 java 从零开始手写 RPC (01) 基于 socket 实现 java 从零开始手写 RP ...
- Apache HttpAsyncClient 如何设置per request timeout
最近做一个项目时用到HttpAsyncClient:因项目所需,要求能对一个具体的request 设置连接和读写超时:但发现在HttpAsyncClient中,只有在创建一个HttpAsyncClie ...
- freeswitch 注册错误408 - Request Timeout
1.网络不通(可能虚拟机没打开网络) 2.防火墙没有过滤端口号(关闭防火墙) 3.IP地址错误
- [bug] kibana:prevMsg":"Request Timeout after 3000ms
ES启动问题,内存不足 https://blog.csdn.net/qq_40907977/article/details/104499178 修改ES启动内存 https://blog.csdn.n ...
- Timeout expired超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
此文章非原创,仅为分享.学习!!! 参考数据库链接串: <add key="data" value="server=192.168.1.123; port=3306 ...
- Timeout expired 超时时间已到. 达到了最大池大小 错误及Max Pool Size设置
参考数据库链接串: <add key="data" value="server=192.168.1.123; Port=3306; uid=root; pwd=ro ...
- StackExchange.Redis .net core Timeout performing 超时问题
最近在做的一个项目,用的.net core 2.1,然后缓存用的Redis,缓存相关封装是同事写的,用的驱动是StackExchange.Redis version 2.0.571 ,一直听说这个驱动 ...
随机推荐
- [Boost库] noncopyable——禁止拷贝的类
1.noncopyable允许程序轻松地实现一个禁止拷贝的类,在头文件<boost/noncopyable.hpp>中 2.实现原理很简单:noncopyable的实现就是用了C++中 ...
- 浏览器兼容性知识&测试计划&测试报告
浏览器兼容性知识&测试计划&测试报告 浏览器兼容性问题:网页或网站兼容性问题,因为不同浏览器使用内核及所支持的HTML(标准通用标记语言下的一个应用)等网页语言标准不同:以及用户客户端 ...
- 暑期——第三周总结(Ubuntu系统安装eclipse问题【已解决】)
所花时间:7天 代码行:200(python)+150(java) 博客量:1篇 了解到知识点 : 一: Python: 问题 unresolved reference xrange 解决方案 pyt ...
- 深入理解perf报告中的swapper进程
一.前言 1.在perf监控进程的系统调用时,会出现大量swapper进程 2.官方描述该进程是当CPU上没有其他任务运行时,就会执行swapper.换句话说swapper意味着CPU啥事也没干,跑去 ...
- 常见MySQL数据库语句
##############Author: Fan ################# (1)数据库 # 查看所有的数据库 SHOW DATABASES ; # 创建一个数据库 ...
- [Next] 初见next.js
next 简介 Next.js 是一个轻量级的 React 服务端渲染应用框架 next 特点 默认情况下由服务器呈现 自动代码拆分可加快页面加载速度 简单的客户端路由(基于页面) 基于 Webpac ...
- 阿里云服务器CentOS6.9安装Mysql
上篇讲了CentOS6.9安装tomcat,这篇来讲mysql的安装 1.查看CentOS是否安装了MySQL yum list installed | grep mysql //查看CentOS是否 ...
- [Mathematics][MIT 18.03] Proof of a Theory about the Solution to Second-order Linear Homogeneous Differential Equation
At first, I'd like to say thank you to MIT open courses which give me the privilege to enjoy the mos ...
- navicat安装及其简单使用
一.安装 下载地址:https://pan.baidu.com/s/1bpo5mqj 下载完之后,直接解压出来就能用,看一下解压之后的目录: 双击打开下面这个文件(可以把它添加一个桌面快捷方式,或者添 ...
- $(document).height 与$(window).height的区别
$(document).scrollTop() 获取垂直滚动的距离 (即当前滚动的地方的窗口顶端到整个页面顶端的距离)$(document).scrollLeft() 这是获取水平滚动条的距离 要获取 ...