瀏覽代碼

异常优化

jiandong.liu 1 天之前
父節點
當前提交
803397cdbf

+ 1 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/FeaturePrinterStrategy.java

@@ -41,7 +41,7 @@ public class FeaturePrinterStrategy extends RankStrategyBasic {
         adRankItem.setCampaignId(dto.getCampaignId());
         adRankItem.setCpm(ObjUtil.nullOrDefault(dto.getCpm(), 90).doubleValue());
         adRankItem.setSkuId(dto.getSkuId());
-        if (noApiAdVerIds.contains(dto.getAdVerId())) {
+        if (noApiAdVerIds != null && noApiAdVerIds.contains(dto.getAdVerId())) {
             adRankItem.getExt().put("isApi", "0");
         } else {
             adRankItem.getExt().put("isApi", "1");

+ 24 - 7
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBasic.java

@@ -221,15 +221,25 @@ public abstract class RankStrategyBasic implements RankStrategy {
 
             // 等待所有任务完成并合并结果
             for (Future<Feature> future : futures) {
-                Feature batchFeature = future.get();  // 获取每个任务的结果
-                if (finalFeature == null) {
-                    finalFeature = batchFeature;
-                } else {
-                    // 合并特征
-                    finalFeature.merge(batchFeature);
+                try {
+                    Feature batchFeature = future.get();  // 获取每个任务的结果
+                    if (batchFeature != null) {
+                        if (finalFeature == null) {
+                            finalFeature = batchFeature;
+                        } else {
+                            // 合并特征
+                            finalFeature.merge(batchFeature);
+                        }
+                    }
+                } catch (ExecutionException e) {
+                    log.error("获取特征批次失败: {}", e.getCause() != null ? e.getCause().getMessage() : e.getMessage());
+                    // 继续处理其他批次,不中断整个流程
                 }
             }
-        } catch (InterruptedException | ExecutionException e) {
+        } catch (InterruptedException e) {
+            log.error("getFeature interrupted", e);
+            Thread.currentThread().interrupt();
+        } catch (Exception e) {
             log.error("getFeature error", e);
         }
         log.info("getFeature time: {}", System.currentTimeMillis() - startTime);
@@ -915,6 +925,13 @@ public abstract class RankStrategyBasic implements RankStrategy {
 
     protected void putMetaFeature(AdRankItem adRankItem, Feature feature, Map<String, String> reqFeature,
                                   Map<String, String> sceneFeatureMap, RankRecommendRequestParam request) {
+        if (feature == null) {
+            log.warn("putMetaFeature: feature is null, skip processing. adVerId={}", adRankItem.getAdVerId());
+            adRankItem.getMetaFeatureMap().put("reqFeature", reqFeature);
+            adRankItem.getMetaFeatureMap().put("sceneFeature", sceneFeatureMap);
+            return;
+        }
+
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();
         Map<String, Map<String, Map<String, String>>> allAdVerFeature = feature.getAdVerFeature();

+ 4 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy679.java

@@ -71,6 +71,10 @@ public class RankStrategyBy679 extends RankStrategyBasic {
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();

+ 4 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy680.java

@@ -81,6 +81,10 @@ public class RankStrategyBy680 extends RankStrategyBasic {
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();

+ 4 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy683.java

@@ -92,7 +92,10 @@ public class RankStrategyBy683 extends RankStrategyBasic {
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
-
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();

+ 4 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy687.java

@@ -67,6 +67,10 @@ public class RankStrategyBy687 extends RankStrategyBasic {
 
         // 获取所有创意对应的客户列表
         Feature feature = this.getFeature(scoreParam, request);
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         List<AdRankItem> rankItems = new ArrayList<>(recallCreativeList.size());
         for (AdPlatformCreativeDTO dto : recallCreativeList) {

+ 4 - 1
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/strategy/RankStrategyBy688.java

@@ -92,7 +92,10 @@ public class RankStrategyBy688 extends RankStrategyBasic {
         // 特征处理
         // feature1
         Feature feature = this.getFeature(scoreParam, request);
-
+        if (feature == null) {
+            log.warn("adItemRank: feature is null, skip processing. request={}", request);
+            return new ArrayList<>();
+        }
 
         Map<String, Map<String, String>> userFeature = feature.getUserFeature();
         Map<String, Map<String, String>> videoFeature = feature.getVideoFeature();