Browse Source

增加并发限制

15810770710@163.com 3 years ago
parent
commit
0111be6c04

+ 4 - 0
pom.xml

@@ -108,6 +108,10 @@
             <artifactId>httpcore</artifactId>
             <version>4.4.14</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-quartz</artifactId>
+        </dependency>
     </dependencies>
     <build>
         <plugins>

+ 17 - 1
src/main/java/info/aspirecn/iov/sjjh/service/impl/VehicleServiceImpl.java

@@ -11,6 +11,7 @@ import info.aspirecn.iov.sjjh.constant.Constants;
 import info.aspirecn.iov.sjjh.entity.*;
 import info.aspirecn.iov.sjjh.enums.VehicleHistoryPositionQueryType;
 import info.aspirecn.iov.sjjh.service.VehicleService;
+import info.aspirecn.iov.sjjh.util.CopyOnWriteArraySetUtil;
 import info.aspirecn.iov.sjjh.util.DateUtil;
 import info.aspirecn.iov.sjjh.util.PostUtil;
 import info.aspirecn.iov.sjjh.util.ValidateParamUtil;
@@ -38,6 +39,10 @@ public class VehicleServiceImpl implements VehicleService {
 
     private OkHttpClient okHttpClient = new OkHttpClient.Builder().build();
 
+    private boolean isPermit(String loginkUserId) {
+        return CopyOnWriteArraySetUtil.getInstance().add(loginkUserId + System.currentTimeMillis() / 1000);
+    }
+
     @Override
     public ChannelTypeHandleResponseObject vehicleHistoryPositionQuery(HttpServletRequest request, String customBody,
                                                                        int outTime, Integer type) {
@@ -46,6 +51,17 @@ public class VehicleServiceImpl implements VehicleService {
         ret.setCode(Constant.SUCCESS);
         String upstreamCode = "" + Constant.LOG_UPSTREAM_DEFAULT_RESPONSE_CODE;
         request.setAttribute(Constant.LOG_UPSTREAM_RESPONSE_CODE, upstreamCode);
+        String loginkUserId = request.getHeader("userid");
+        log.info("用户id:{}", loginkUserId);
+
+        if (!isPermit(loginkUserId)) {
+            ret.setResultCode(Constant.UN_MATCH_CODE);
+            ret.setResultBody("超出并发限制,无法核验");
+            ret.setResultDesc(Constant.QUERY_SUCCESS);
+            log.info("用户id:{}, 超出并发限制,无法核验", loginkUserId);
+            return ret;
+        }
+
         if (outTime <= Constants.PARA_ZERO) {
             outTime = Constant.HTTPCLIENT_CONNECTTIMEOUT;
         }
@@ -300,7 +316,7 @@ public class VehicleServiceImpl implements VehicleService {
             ret.setResultDesc(Constant.QUERY_SUCCESS);
             return upstreamCode;
         }
-        if (errorList.size() == 1 && emptyList.size() ==1) {
+        if (errorList.size() == 1 && emptyList.size() == 1) {
             errorMsg = "数据源" + org.apache.commons.lang3.StringUtils.join(emptyList, ",") + "为空,";
             errorMsg += org.apache.commons.lang3.StringUtils.join(errorList, ",") + "为不一致";
             ret.setResultCode(Constant.UN_MATCH_CODE);

+ 18 - 0
src/main/java/info/aspirecn/iov/sjjh/task/CleanSetTask.java

@@ -0,0 +1,18 @@
+package info.aspirecn.iov.sjjh.task;
+
+import info.aspirecn.iov.sjjh.util.CopyOnWriteArraySetUtil;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+@Component
+public class CleanSetTask {
+
+    @Scheduled(cron = "* * * * * ?", zone = "Asia/Shanghai")
+    public void remove() {
+        CopyOnWriteArraySetUtil.clean();
+    }
+}

+ 24 - 0
src/main/java/info/aspirecn/iov/sjjh/util/CopyOnWriteArraySetUtil.java

@@ -0,0 +1,24 @@
+package info.aspirecn.iov.sjjh.util;
+
+import java.util.concurrent.CopyOnWriteArraySet;
+
+/**
+ * @author xusonglin
+ * @version V1.0
+ **/
+public enum CopyOnWriteArraySetUtil {
+    INSTANCE;
+    public static CopyOnWriteArraySet<String> copyOnWriteArraySet = new CopyOnWriteArraySet<>();
+    public boolean add(String key) {
+        return copyOnWriteArraySet.add(key);
+    }
+
+    public static CopyOnWriteArraySet<String> getInstance() {
+        return copyOnWriteArraySet;
+    }
+
+    public static CopyOnWriteArraySet<String> clean() {
+        copyOnWriteArraySet.clear();
+        return copyOnWriteArraySet;
+    }
+}

+ 0 - 1
src/main/java/info/aspirecn/iov/sjjh/util/HttpUtil.java

@@ -378,7 +378,6 @@ public class HttpUtil {
         headers.put(SystemHeader.X_CA_KEY, appKey);
         headers.put(SystemHeader.X_CA_SIGNATURE,
                 SignUtil.sign(appSecret, method, path, headers, querys, bodys, signHeaderPrefixList));
-        System.out.println("Header: " + JSON.toJSONString(headers));
         return headers;
     }