deason 5 年之前
父节点
当前提交
3d492c9933
共有 1 个文件被更改,包括 33 次插入11 次删除
  1. 33 11
      src/main/java/cn/com/qmth/examcloud/app/service/RouterService.java

+ 33 - 11
src/main/java/cn/com/qmth/examcloud/app/service/RouterService.java

@@ -2,6 +2,7 @@ package cn.com.qmth.examcloud.app.service;
 
 import cn.com.qmth.examcloud.app.core.SysProperty;
 import cn.com.qmth.examcloud.app.core.router.Router;
+import cn.com.qmth.examcloud.app.core.utils.HttpClientBuilder;
 import cn.com.qmth.examcloud.app.model.Constants;
 import cn.com.qmth.examcloud.app.model.Result;
 import okhttp3.*;
@@ -14,6 +15,7 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
 import java.io.UnsupportedEncodingException;
+import java.net.ConnectException;
 import java.net.URLEncoder;
 import java.util.HashMap;
 import java.util.Map;
@@ -43,9 +45,11 @@ public class RouterService {
         } else {
             requestHeaders = router.getHeaders();
         }
+
+        String traceId = this.getRandomTraceId();
         requestHeaders.put(PARAM_KEY, router.getKey());
         requestHeaders.put(PARAM_TOKEN, router.getToken());
-        requestHeaders.put(PARAM_TRACE_ID, this.getRandomTraceId());
+        requestHeaders.put(PARAM_TRACE_ID, traceId);
         requestHeaders.put(PARAM_CLIENT, PARAM_CLIENT_VALUE);
 
         //处理请求Params
@@ -56,7 +60,7 @@ public class RouterService {
 
         //处理请求地址
         final String requestUrl = sysProperty.getProxyUrl(router.getServer()) + "/" + router.getUrl() + requestParams;
-        log.info(String.format("[%s][%s]%s ", router.getServer().getInstanceName(), router.getMethod().name(), requestUrl));
+        log.info(String.format("[%s][%s][%s]%s ", traceId, router.getServer().getInstanceName(), router.getMethod().name(), requestUrl));
 
         //封装请求
         Request.Builder request = new Request.Builder()
@@ -65,21 +69,39 @@ public class RouterService {
 
         switch (router.getMethod()) {
             case GET:
-                return this.call(request.get().build());
+                return this.call(request.get().build(), traceId);
             case POST:
-                return this.call(request.post(requestBody).build());
+                return this.call(request.post(requestBody).build(), traceId);
             case PUT:
-                return this.call(request.put(requestBody).build());
+                return this.call(request.put(requestBody).build(), traceId);
             case DELETE:
-                return this.call(request.delete(requestBody).build());
+                return this.call(request.delete(requestBody).build(), traceId);
+            default:
+                return new Result().error("请求方式错误!");
         }
-
-        return new Result().error();
     }
 
-    private Result call(Request request) {
-        //todo
-        return new Result().success();
+    private Result call(Request request, String traceId) {
+        OkHttpClient client = HttpClientBuilder.getClient();
+
+        try (Response response = client.newCall(request).execute();
+             ResponseBody body = response.body();) {
+            String bodyStr = body.string();
+
+            if (response.isSuccessful()) {
+                return new Result().success(bodyStr);
+            }
+
+            log.warn(String.format("[%s][response] code:%s body:%s", traceId, response.code(), bodyStr));
+            return new Result().error(bodyStr);
+        } catch (Exception e) {
+            log.error(e.getMessage(), e);
+            if (e instanceof ConnectException) {
+                return new Result().error("服务访问失败!");
+            }
+        }
+
+        return new Result().error("请求异常!");
     }
 
     private RequestBody appendBody(String body) {