xuxueli / xxl-job

A distributed task scheduling framework.(分布式任务调度平台XXL-JOB)
http://www.xuxueli.com/xxl-job/
GNU General Public License v3.0
27.47k stars 10.86k forks source link

read time out #1379

Closed alexander-wong-tech closed 4 years ago

alexander-wong-tech commented 4 years ago

版本号:2.1.2

部署xxl-job-admin到docker容器中,连接容器中的mysql都正常,现在jobHandler控制台能看到打印信息,表明我的JobHandler已经正确的执行了,可是频繁出现下面的错误:

java.net.SocketTimeoutException: Read timed out at java.base/java.net.SocketInputStream.socketRead0(Native Method) at java.base/java.net.SocketInputStream.socketRead(SocketInputStream.java:115) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:168) at java.base/java.net.SocketInputStream.read(SocketInputStream.java:140) at java.base/java.io.BufferedInputStream.fill(BufferedInputStream.java:252) at java.base/java.io.BufferedInputStream.read1(BufferedInputStream.java:292) at java.base/java.io.BufferedInputStream.read(BufferedInputStream.java:351) at java.base/sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:746) at java.base/sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:689) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1610) at java.base/sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1515) at java.base/java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:527) at com.xxl.job.core.util.XxlJobRemotingUtil.postBody(XxlJobRemotingUtil.java:112) at com.xxl.job.core.biz.client.AdminBizClient.callback(AdminBizClient.java:36) at com.xxl.job.core.thread.TriggerCallbackThread.doCallback(TriggerCallbackThread.java:166) at com.xxl.job.core.thread.TriggerCallbackThread.access$200(TriggerCallbackThread.java:24) at com.xxl.job.core.thread.TriggerCallbackThread$1.run(TriggerCallbackThread.java:74) at java.base/java.lang.Thread.run(Thread.java:834)

6haining commented 4 years ago

这是job-admin与执行器回调,返回值含有中文乱码的问题。 解决方案:将XxlJobRemotingUtil 此类(在60行左右)代码: dataOutputStream.writeBytes(requestBody); 改为: dataOutputStream.write(requestBody.getBytes(java.nio.charset.StandardCharsets.UTF_8));

参照github 提交节点:6a0ab3437fc102f9f715bd8b03e33b3059dd5810 或git网址:https://github.com/xuxueli/xxl-job/commit/6a0ab3437fc102f9f715bd8b03e33b3059dd5810

alexander-wong-tech commented 4 years ago

@6haining

我的jar包目前是2.1.2最新的,而且XxlJobRemotingUtil 类的源码查看已经是dataOutputStream.write(requestBody.getBytes(java.nio.charset.StandardCharsets.UTF_8));但是还是有错误。

connection.setRequestMethod("POST"); connection.setDoOutput(true); connection.setDoInput(true); connection.setUseCaches(false); connection.setReadTimeout(timeout * 1000); connection.setConnectTimeout(3000); connection.setRequestProperty("connection", "Keep-Alive"); connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8"); connection.setRequestProperty("Accept-Charset", "application/json;charset=UTF-8"); if (accessToken != null && accessToken.trim().length() > 0) { connection.setRequestProperty(XXL_RPC_ACCESS_TOKEN, accessToken); }

connection.connect(); String requestBody = BasicJson.toJson(requestObj); DataOutputStream dataOutputStream = new DataOutputStream(connection.getOutputStream()); dataOutputStream.write(requestBody.getBytes("UTF-8")); dataOutputStream.flush(); dataOutputStream.close();

int statusCode = connection.getResponseCode();

我的代码追到了最后一行,貌似是connection.readtimeout设置时间太短了。

alexander-wong-tech commented 4 years ago

在类AdminBizClient中,调用的超时时间是写死的。这个3的超时时间没有办法修改吗?

@Override public ReturnT callback(List callbackParamList) { return XxlJobRemotingUtil.postBody(addressUrl+"api/callback", accessToken, callbackParamList,3); }

@Override public ReturnT registry(RegistryParam registryParam) { return XxlJobRemotingUtil.postBody(addressUrl + "api/registry", accessToken, registryParam, 3); }

@Override public ReturnT registryRemove(RegistryParam registryParam) { return XxlJobRemotingUtil.postBody(addressUrl + "api/registryRemove", accessToken, registryParam, 3); }

6haining commented 4 years ago

可以设置成30秒,长一点。 或者写到配置文件里,在AdminBizClient类加上 @Component + @Value("xxl.job.client.http.timeout")注入值

stefanxfy commented 3 years ago

超时设置为30秒有点长吧

lwgo2050 commented 2 years ago

为什么3秒还处理不完呢,潮湿时间放的太大也不好啊

stefanxfy commented 2 years ago

我这在生产环境也时常出现心跳超时或者调用超时

---Original--- From: @.> Date: Sun, Jan 30, 2022 20:19 PM To: @.>; Cc: @.**@.>; Subject: Re: [xuxueli/xxl-job] read time out (#1379)

为什么3秒还处理不完呢,潮湿时间放的太大也不好啊

— Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android. You are receiving this because you commented.Message ID: @.***>