jiandong.yh 17 tuntia sitten
vanhempi
commit
19bcef2898

+ 5 - 0
ad-engine-server/src/main/resources/application.yml

@@ -129,6 +129,11 @@ grpc:
   client:
     recommend-feature:
       negotiationType: PLAINTEXT
+      # KeepAlive 配置(防止空闲连接被网关关闭)
+      enable-keep-alive: true
+      keep-alive-time: 30s
+      keep-alive-timeout: 5s
+      keep-alive-without-calls: true
     recommend-server:
       negotiationType: PLAINTEXT
     GLOBAL:

+ 4 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/feature/FeatureService.java

@@ -115,6 +115,10 @@ public class FeatureService {
     public Feature invokeFeatureService(List<FeatureKeyProto> protos) {
 
         Map<String, String> featureMap = remoteService.getFeature(protos);
+        if (featureMap == null) {
+            log.warn("invokeFeatureService: featureMap is null, return empty feature");
+            return new Feature();
+        }
         featureMap = this.featureStrCover(featureMap);
 
         Feature feature = new Feature();

+ 6 - 0
ad-engine-service/src/main/java/com/tzld/piaoquan/ad/engine/service/score/impl/RankServiceImpl.java

@@ -89,6 +89,12 @@ public class RankServiceImpl implements RankService {
         RankStrategy rankStrategy = getRankStrategy(scoreParam);
         List<AdRankItem> adRankItems = rankStrategy.adItemRank(request, scoreParam);
         logHubService.scoreLogUpload(scoreParam, request.getAdIdList(), adRankItems, request, scoreParam.getExpCode());
+        
+        // 防御性检查:避免空列表导致 IndexOutOfBoundsException
+        if (CollectionUtils.isEmpty(adRankItems)) {
+            log.warn("adItemRank: adRankItems is empty, request={}", request);
+            return null;
+        }
         return adRankItems.get(0);
     }