yumeng 1 tháng trước cách đây
mục cha
commit
f2fe41f3cc

+ 2 - 1
src/main/java/com/adx/tencent/AppConfiguration.java

@@ -228,7 +228,8 @@ public class AppConfiguration {
                 props.getBaiduAdxEndpoint(),
                 encoder,
                 objectMapper,
-                props.getBaiduTrackingMaxRedirects());
+                props.getBaiduTrackingMaxRedirects(),
+                props.getBaiduTrackingMax500Retries());
     }
 
     @Bean

+ 23 - 1
src/main/java/com/adx/tencent/baidu/AdxClient.java

@@ -32,8 +32,13 @@ public class AdxClient {
     private final AuctionPriceEncoder priceEncoder;
     private final ObjectMapper objectMapper;
     private final int trackingMaxRedirects;
+    private final int trackingMax500Retries;
 
-    public AdxClient(String endpoint, AuctionPriceEncoder priceEncoder, ObjectMapper objectMapper, int trackingMaxRedirects) {
+    public AdxClient(String endpoint,
+                     AuctionPriceEncoder priceEncoder,
+                     ObjectMapper objectMapper,
+                     int trackingMaxRedirects,
+                     int trackingMax500Retries) {
         this.endpoint = endpoint;
         this.priceEncoder = priceEncoder;
         this.httpClient = HttpClient.newBuilder()
@@ -41,6 +46,7 @@ public class AdxClient {
                 .build();
         this.objectMapper = objectMapper;
         this.trackingMaxRedirects = Math.max(0, trackingMaxRedirects);
+        this.trackingMax500Retries = Math.max(0, trackingMax500Retries);
     }
 
     /**
@@ -129,6 +135,7 @@ public class AdxClient {
             throws IOException, InterruptedException {
         String currentUrl = originalUrl;
         int redirectCount = 0;
+        int status500RetryCount = 0;
         while (true) {
             HttpRequest req = HttpRequest.newBuilder()
                     .uri(URI.create(currentUrl))
@@ -144,6 +151,21 @@ public class AdxClient {
                 }
                 return new TrackingResult(originalUrl, status, true);
             }
+            if (status == 500) {
+                if (status500RetryCount >= trackingMax500Retries) {
+                    log.warn("[百度监测][500重试失败] originalUrl={} currentUrl={} status={} retries={} maxRetries={} redirects={} reason=retry_limit_exceeded",
+                            summarizeUrl(originalUrl), summarizeUrl(currentUrl), status,
+                            status500RetryCount, trackingMax500Retries, redirectCount);
+                    return new TrackingResult(originalUrl, status, false);
+                }
+                status500RetryCount++;
+                log.warn("[百度监测][500重试] originalUrl={} currentUrl={} status={} retry={}/{} redirects={} action=retry_original_url",
+                        summarizeUrl(originalUrl), summarizeUrl(currentUrl), status,
+                        status500RetryCount, trackingMax500Retries, redirectCount);
+                currentUrl = originalUrl;
+                redirectCount = 0;
+                continue;
+            }
             if (status != 302) {
                 if (redirectCount > 0) {
                     log.warn("[百度监测][302跟随失败] originalUrl={} finalUrl={} status={} redirects={} reason=non_302_terminal_status",

+ 9 - 0
src/main/java/com/adx/tencent/config/AppProperties.java

@@ -38,6 +38,7 @@ public class AppProperties {
     private long baiduBidFloor = 0;
     private int baiduActionType = 1;
     private int baiduTrackingMaxRedirects = 20;
+    private int baiduTrackingMax500Retries = 3;
 
     // Honor Callback
     private String honorConversionBaseUrl = "https://ads-drcn.platform.hihonorcloud.com";
@@ -311,6 +312,14 @@ public class AppProperties {
         this.baiduTrackingMaxRedirects = v;
     }
 
+    public int getBaiduTrackingMax500Retries() {
+        return baiduTrackingMax500Retries;
+    }
+
+    public void setBaiduTrackingMax500Retries(int v) {
+        this.baiduTrackingMax500Retries = v;
+    }
+
     public String getHonorConversionBaseUrl() {
         return honorConversionBaseUrl;
     }

+ 1 - 0
src/main/resources/application-dev.yml

@@ -25,6 +25,7 @@ adx:
   baidu-customer-name: dingzhaoming111
   baidu-secret: gk780scz3oi2
   baidu-tracking-max-redirects: 20
+  baidu-tracking-max-500-retries: 3
 
   # --- Tencent API ---
   tencent-api-base-url: "https://api.e.qq.com/v3.0"

+ 1 - 0
src/main/resources/application-prod.yml

@@ -25,6 +25,7 @@ adx:
   baidu-customer-name: "dingzhaoming111"
   baidu-secret: "gk780scz3oi2"
   baidu-tracking-max-redirects: 20
+  baidu-tracking-max-500-retries: 3
 
   # --- Tencent API ---
   tencent-access-token-redis-key: "adq:access_token:78578478"

+ 1 - 0
src/main/resources/application-test.yml

@@ -25,6 +25,7 @@ adx:
   baidu-customer-name: dingzhaoming111
   baidu-secret: gk780scz3oi2
   baidu-tracking-max-redirects: 20
+  baidu-tracking-max-500-retries: 3
 
   # --- Tencent API ---
   tencent-api-base-url: "https://api.e.qq.com/v3.0"