Przeglądaj źródła

FEAT: 订单查询限制

xdd 3 dni temu
rodzic
commit
9039d6dcdf

+ 9 - 30
fs-service-system/src/main/java/com/fs/erp/service/impl/ErpOrderServiceProxy.java

@@ -26,7 +26,7 @@ import java.util.Map;
 @Service
 @Primary
 public class ErpOrderServiceProxy implements IErpOrderService {
-    private final RateLimiter rateLimiter = RateLimiter.create(5.0);
+    private final RateLimiter rateLimiter = RateLimiter.create(1.0);
 
     /**
      * 存储所有实现的ERP订单服务
@@ -76,41 +76,20 @@ public class ErpOrderServiceProxy implements IErpOrderService {
     @Override
     public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param) {
         if(StringUtils.equals(ErpContextHolder.getErpType(), ErpTypeConstant.JST_ERP)) {
-            // 最大重试次数
-            int maxRetries = 3;
-            // 当前重试次数
-            int retryCount = 0;
-
-            while (retryCount < maxRetries) {
-                if (rateLimiter.tryAcquire()) {
-                    // 获取到令牌,直接执行请求
-                    return getCurrentErpService().getOrder(param);
-                }
-
-                // 重试计数增加
-                retryCount++;
-
-                if (retryCount < maxRetries) {
-                    try {
-                        // 每次重试间隔时间递增:500ms, 1000ms, 1500ms...
-                        long waitTime = 1000 * retryCount;
-                        Thread.sleep(waitTime);
-                        log.info("ERP请求被限流,等待{}ms后第{}次重试", waitTime, retryCount);
-                    } catch (InterruptedException e) {
-                        Thread.currentThread().interrupt();
-                        break;
-                    }
-                }
-            }
-
-            // 达到最大重试次数后仍无法获取令牌,才抛出异常
-            throw new RuntimeException("请求过于频繁,请稍后再试");
+            // 阻塞等待直到获取到令牌
+            rateLimiter.acquire();
+            log.info("获取到令牌,执行ERP请求");
         }
         return getCurrentErpService().getOrder(param);
     }
 
     @Override
     public ErpOrderQueryResponse getOrderLive(ErpOrderQueryRequert param) {
+        if(StringUtils.equals(ErpContextHolder.getErpType(), ErpTypeConstant.JST_ERP)) {
+            // 阻塞等待直到获取到令牌
+            rateLimiter.acquire();
+            log.info("获取到令牌,执行ERP请求");
+        }
         return getCurrentErpService().getOrderLive(param);
     }
 

+ 1 - 0
fs-service-system/src/main/java/com/fs/erp/service/impl/JSTErpOrderServiceImpl.java

@@ -209,6 +209,7 @@ public class JSTErpOrderServiceImpl implements IErpOrderService {
         return null;
     }
 
+    
     @Override
     public ErpOrderQueryResponse getOrder(ErpOrderQueryRequert param) {
         // 1. 构建查询请求DTO