From e7d1354098b22c1abc4e0d44486c9843a3022719 Mon Sep 17 00:00:00 2001 From: "xueli.xue" Date: Wed, 15 Mar 2017 16:59:55 +0800 Subject: [PATCH] =?UTF-8?q?=E9=80=9A=E8=AE=AF=E5=8D=8F=E8=AE=AE=E4=BA=8C?= =?UTF-8?q?=E8=BF=9B=E5=88=B6=E6=8D=AE=E5=A2=9E=E5=BC=BA=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=EF=BC=8C=E5=A4=84=E7=90=86=E9=9D=9E=E6=AD=A3=E5=B8=B8=E8=AF=B7?= =?UTF-8?q?=E6=B1=82=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + .../rpc/netcom/jetty/client/JettyClient.java | 28 ++++++++++++++-- .../jetty/server/JettyServerHandler.java | 33 +++++++++++++++---- .../com/xxl/job/core/util/HttpClientUtil.java | 10 ++---- 4 files changed, 56 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index fc915a30..7f85eb9a 100644 --- a/README.md +++ b/README.md @@ -768,6 +768,7 @@ Tips: 历史版本(V1.3.x)目前已经Release至稳定版本, 进入维护阶段 #### 6.12 版本 V1.6.1 特性 (Coding) - 1、rolling日志,日志界面风格同glue任务编辑器; +- 2、 #### TODO LIST diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/client/JettyClient.java b/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/client/JettyClient.java index b0cecec5..f0098d19 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/client/JettyClient.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/client/JettyClient.java @@ -4,17 +4,39 @@ import com.xxl.job.core.rpc.codec.RpcRequest; import com.xxl.job.core.rpc.codec.RpcResponse; import com.xxl.job.core.rpc.serialize.HessianSerializer; import com.xxl.job.core.util.HttpClientUtil; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * jetty client * @author xuxueli 2015-11-24 22:25:15 */ public class JettyClient { + private static Logger logger = LoggerFactory.getLogger(JettyClient.class); public RpcResponse send(RpcRequest request) throws Exception { - byte[] requestBytes = HessianSerializer.serialize(request); - byte[] responseBytes = HttpClientUtil.postRequest("http://" + request.getServerAddress() + "/", requestBytes); - return (RpcResponse) HessianSerializer.deserialize(responseBytes, RpcResponse.class); + try { + // serialize request + byte[] requestBytes = HessianSerializer.serialize(request); + + // remote invoke + byte[] responseBytes = HttpClientUtil.postRequest("http://" + request.getServerAddress() + "/", requestBytes); + if (responseBytes == null || responseBytes.length==0) { + RpcResponse rpcResponse = new RpcResponse(); + rpcResponse.setError("RpcResponse byte[] is null"); + return rpcResponse; + } + + // deserialize response + RpcResponse rpcResponse = (RpcResponse) HessianSerializer.deserialize(responseBytes, RpcResponse.class); + return rpcResponse; + } catch (Exception e) { + logger.error(e.getMessage(), e); + + RpcResponse rpcResponse = new RpcResponse(); + rpcResponse.setError("Servet-error:" + e.getMessage()); + return rpcResponse; + } } } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServerHandler.java b/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServerHandler.java index 2dbc3ba6..4328ee5d 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServerHandler.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/rpc/netcom/jetty/server/JettyServerHandler.java @@ -7,6 +7,8 @@ import com.xxl.job.core.rpc.serialize.HessianSerializer; import com.xxl.job.core.util.HttpClientUtil; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; @@ -19,17 +21,13 @@ import java.io.OutputStream; * @author xuxueli 2015-11-19 22:32:36 */ public class JettyServerHandler extends AbstractHandler { - + private static Logger logger = LoggerFactory.getLogger(JettyServerHandler.class); @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - // deserialize request - byte[] requestBytes = HttpClientUtil.readBytes(request); - RpcRequest rpcRequest = (RpcRequest) HessianSerializer.deserialize(requestBytes, RpcRequest.class); - // invoke - RpcResponse rpcResponse = NetComServerFactory.invokeService(rpcRequest, null); + RpcResponse rpcResponse = doInvoke(request); // serialize response byte[] responseBytes = HessianSerializer.serialize(rpcResponse); @@ -44,4 +42,27 @@ public class JettyServerHandler extends AbstractHandler { } + private RpcResponse doInvoke(HttpServletRequest request) { + try { + // deserialize request + byte[] requestBytes = HttpClientUtil.readBytes(request); + if (requestBytes == null || requestBytes.length==0) { + RpcResponse rpcResponse = new RpcResponse(); + rpcResponse.setError("RpcRequest byte[] is null"); + return rpcResponse; + } + RpcRequest rpcRequest = (RpcRequest) HessianSerializer.deserialize(requestBytes, RpcRequest.class); + + // invoke + RpcResponse rpcResponse = NetComServerFactory.invokeService(rpcRequest, null); + return rpcResponse; + } catch (Exception e) { + logger.error(e.getMessage(), e); + + RpcResponse rpcResponse = new RpcResponse(); + rpcResponse.setError("Servet-error:" + e.getMessage()); + return rpcResponse; + } + } + } diff --git a/xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java b/xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java index c39f759b..6d1af0d8 100644 --- a/xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java +++ b/xxl-job-core/src/main/java/com/xxl/job/core/util/HttpClientUtil.java @@ -1,7 +1,5 @@ package com.xxl.job.core.util; -import com.xxl.job.core.rpc.codec.RpcResponse; -import com.xxl.job.core.rpc.serialize.HessianSerializer; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.methods.HttpPost; @@ -27,7 +25,7 @@ public class HttpClientUtil { /** * post request */ - public static byte[] postRequest(String reqURL, byte[] date) { + public static byte[] postRequest(String reqURL, byte[] date) throws Exception { byte[] responseBytes = null; HttpPost httpPost = new HttpPost(reqURL); @@ -53,10 +51,7 @@ public class HttpClientUtil { } } catch (Exception e) { logger.error("", e); - - RpcResponse rpcResponse = new RpcResponse(); - rpcResponse.setError(e.getMessage()); - responseBytes = HessianSerializer.serialize(rpcResponse); + throw e; } finally { httpPost.releaseConnection(); try { @@ -93,6 +88,7 @@ public class HttpClientUtil { return message; } catch (IOException e) { e.printStackTrace(); + throw e; } } return new byte[] {};