丁云鹏 1 год назад
Родитель
Сommit
b65fc68305

+ 5 - 8
recommend-server-service/pom.xml

@@ -75,8 +75,6 @@
         </dependency>
 
 
-
-
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-test</artifactId>
@@ -194,20 +192,19 @@
             <groupId>org.springframework.data</groupId>
             <artifactId>spring-data-mongodb</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.mongodb</groupId>
-            <artifactId>mongo-java-driver</artifactId>
-            <version>3.8.0</version>
-        </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-data-jpa</artifactId>
-            <version>3.1.3</version>
+            <version>2.4.3</version>
         </dependency>
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.mongodb</groupId>
+            <artifactId>mongodb-driver-sync</artifactId>
+        </dependency>
     </dependencies>
 
 

+ 13 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/config/MongoTemplateConfig.java

@@ -2,6 +2,7 @@ package com.tzld.piaoquan.recommend.server.config;
 
 import com.mongodb.MongoClientSettings;
 import com.mongodb.MongoCredential;
+import com.mongodb.ServerAddress;
 import com.mongodb.client.MongoClient;
 import com.mongodb.client.MongoClients;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
@@ -18,6 +19,8 @@ import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
 
 import java.util.concurrent.TimeUnit;
 
+import static java.util.Collections.singletonList;
+
 /**
  * @author dyp
  */
@@ -27,13 +30,22 @@ public class MongoTemplateConfig {
     @Bean
     public MongoClient mongoClient(CustomMongoProperties properties) {
         MongoClientSettings.Builder builder = MongoClientSettings.builder();
+
+        builder.applyToClusterSettings(settings -> {
+            settings.hosts(singletonList(
+                    new ServerAddress(properties.getHost(), properties.getPort())));
+        });
+
+
         builder.credential(MongoCredential.createCredential(properties.getUsername(), properties.getDatabase(), properties.getPassword()));
         builder.applyToConnectionPoolSettings(b -> {
             b.minSize(properties.getMinSize());
             b.maxSize(properties.getMaxSize());
             b.maxWaitTime(properties.getMaxWaitTime(), TimeUnit.MILLISECONDS);
             b.maxConnectionIdleTime(properties.getMaxConnectionIdleTime(), TimeUnit.MILLISECONDS);
-            b.maxConnectionLifeTime(properties.getMaxConnectionLifeTime(), TimeUnit.MILLISECONDS);
+            //   b.maxConnectionLifeTime(properties.getMaxConnectionLifeTime(), TimeUnit.MILLISECONDS);
+//            b.maintenanceFrequency(10, TimeUnit.MILLISECONDS);
+//            b.maintenanceInitialDelay(10, TimeUnit.MILLISECONDS);
 //            b.(properties.getMaintenanceFrequency());
 //            b.maintenanceInitialDelay();
         });

+ 16 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/repository/WxVideoTagRel.java

@@ -4,17 +4,32 @@ import lombok.Data;
 
 import javax.persistence.Entity;
 import javax.persistence.Id;
+import javax.persistence.IdClass;
 import javax.persistence.Table;
+import java.io.Serializable;
 import java.util.Date;
 
 @Data
 @Entity
 @Table(name = "wx_video_tag_rel")
-public class WxVideoTagRel {
+@IdClass(WxVideoTagRel.WxVideoTagRelId.class)
+public class WxVideoTagRel implements Serializable {
     @Id
     private Long videoId;
     @Id
     private Long tagId;
 
     private Date createTime;
+
+    @Data
+    public class WxVideoTagRelId implements Serializable {
+        private Long videoId;
+        private Long tagId;
+
+        public WxVideoTagRelId() {
+
+        }
+
+
+    }
 }

+ 7 - 3
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/AbstractFilterService.java

@@ -137,7 +137,8 @@ public abstract class AbstractFilterService {
         param.setVideoIds(riskVideoIds);
 
         List<FilterStrategy> strategies = getStrategies(param);
-        log.info("strategies {}", JSONUtils.toJson(CommonCollectionUtils.toList(strategies, o -> o.getClass().getSimpleName())));
+        log.info("filter strategies {}", JSONUtils.toJson(CommonCollectionUtils.toList(strategies,
+                o -> o.getClass().getSimpleName())));
         CountDownLatch cdl = new CountDownLatch(strategies.size());
         List<Future<List<Long>>> futures = new ArrayList<>();
         for (final FilterStrategy strategy : strategies) {
@@ -149,9 +150,9 @@ public abstract class AbstractFilterService {
             futures.add(future);
         }
         try {
-            cdl.await(3000, TimeUnit.MILLISECONDS);
+            cdl.await(1000, TimeUnit.MILLISECONDS);
         } catch (InterruptedException e) {
-            log.error("recall error", e);
+            log.error("filter error", e);
             return null;
         }
 
@@ -167,6 +168,9 @@ public abstract class AbstractFilterService {
             return Collections.emptyList();
         }
         List<Long> result = videoIds.get(0);
+        if (CollectionUtils.isEmpty(result)) {
+            return Collections.emptyList();
+        }
         for (int i = 1; i < videoIds.size(); ++i) {
             result.retainAll(videoIds.get(i));
         }

+ 1 - 1
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/strategy/AllowListStrategy.java

@@ -80,7 +80,7 @@ public class AllowListStrategy implements FilterStrategy {
         try {
             int newIdx = Math.abs(Hashing.murmur3_32().hashLong(videoId).asInt()) % 100;
             String newPrefix = VIDEO_ALLOW_LIST_BITMAP_KEY_SET_PREFIX + newIdx;
-            Boolean result = redisTemplate.opsForSet().isMember(newPrefix, videoId);
+            Boolean result = redisTemplate.opsForSet().isMember(newPrefix, String.valueOf(videoId));
             // 兼容旧 key
             if (Objects.equals(1, mvalCompatible) && !result) {
                 int idx = Math.abs(Hashing.murmur3_32().hashLong(videoId).asInt()) % 10;

+ 4 - 4
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/filter/strategy/RecommendStatusStrategy.java

@@ -29,6 +29,7 @@ public class RecommendStatusStrategy implements FilterStrategy {
     @Autowired
     private RedisTemplate<String, String> redisTemplate;
 
+    @Autowired
     private VideoRecommendStatusRepository videoRecommendStatusRepository;
 
     private String keyFormat = "video:recommend:status:%s";
@@ -62,7 +63,7 @@ public class RecommendStatusStrategy implements FilterStrategy {
         if (CollectionUtils.isNotEmpty(cacheMissVideoIds)) {
             List<VideoRecommendStatus> status = videoRecommendStatusRepository.findAllByVideoIdIn(cacheMissVideoIds);
             if (CollectionUtils.isNotEmpty(status)) {
-                status.stream().forEach(v -> {
+                for (VideoRecommendStatus v : status) {
                     recommendStatusMap.put(v.getVideoId(), v.getRecommendStatus());
 
                     // TODO 异步更新缓存
@@ -82,14 +83,13 @@ public class RecommendStatusStrategy implements FilterStrategy {
                             }
                         });
                     });
-
-                });
+                }
             }
         }
 
 
         return param.getVideoIds().stream()
-                .filter(id -> recommendStatusMap.get(id) == RECOMMEND_STATUS)
+                .filter(id -> recommendStatusMap.containsKey(id) && recommendStatusMap.get(id) == RECOMMEND_STATUS)
                 .collect(Collectors.toList());
     }
 

+ 15 - 0
recommend-server-service/src/main/resources/application-dev.yml

@@ -49,6 +49,21 @@ spring:
       maxWaitTime: 30000
       minSize: 5
       maxSize: 10
+  datasource:
+    url: jdbc:mysql://rm-bp1k5853td1r25g3n690.mysql.rds.aliyuncs.com:3306/longvideo?useSSL=true&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull
+    username: wx2016_longvideo
+    password: wx2016_longvideoP@assword1234
+    driver-class-name: com.mysql.jdbc.Driver
+    hikari:
+      connection-timeout: 30000
+      minimum-idle: 5
+      maximum-pool-size: 10
+      auto-commit: true
+      idle-timeout: 30000
+  jpa:
+    hibernate:
+      ddl-auto: validate
+    database: mysql
 
 xxl:
   job: