Browse Source

ADD:Service Xxl job

sunxy 1 year ago
parent
commit
5a3ff34de9

+ 4 - 0
recommend-server-service/pom.xml

@@ -179,6 +179,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
         </dependency>
+        <dependency>
+            <groupId>com.xuxueli</groupId>
+            <artifactId>xxl-job-core</artifactId>
+        </dependency>
     </dependencies>
 
 

+ 60 - 0
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/config/XxlJobConfig.java

@@ -0,0 +1,60 @@
+package com.tzld.piaoquan.recommend.server.config;
+
+import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * <p>
+ * xxl-job config
+ * </p>
+ *
+ * @author ZhouYang
+ * @date 2021/08/17
+ */
+@Slf4j
+@Configuration
+public class XxlJobConfig {
+
+    @Value("${xxl.job.admin.addresses}")
+    private String adminAddresses;
+
+    @Value("${xxl.job.accessToken}")
+    private String accessToken;
+
+    @Value("${xxl.job.executor.appname}")
+    private String appname;
+
+    @Value("${xxl.job.executor.address}")
+    private String address;
+
+    @Value("${xxl.job.executor.ip}")
+    private String ip;
+
+    @Value("${xxl.job.executor.port}")
+    private int port;
+
+    @Value("${xxl.job.executor.logpath}")
+    private String logPath;
+
+    @Value("${xxl.job.executor.logretentiondays}")
+    private int logRetentionDays;
+
+    @Bean
+    public XxlJobSpringExecutor xxlJobExecutor() {
+        log.info("xxl-job config init");
+        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
+        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
+        xxlJobSpringExecutor.setAppname(appname);
+        xxlJobSpringExecutor.setAddress(address);
+        xxlJobSpringExecutor.setIp(ip);
+        xxlJobSpringExecutor.setPort(port);
+        xxlJobSpringExecutor.setAccessToken(accessToken);
+        xxlJobSpringExecutor.setLogPath(logPath);
+        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
+        return xxlJobSpringExecutor;
+    }
+
+}

+ 10 - 6
recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/service/SyncFlowPoolRecentTopVideoJob.java → recommend-server-service/src/main/java/com/tzld/piaoquan/recommend/server/xxl/SyncFlowPoolRecentTopVideoJob.java

@@ -1,13 +1,15 @@
-package com.tzld.piaoquan.recommend.server.service;
+package com.tzld.piaoquan.recommend.server.xxl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.aliyun.odps.data.Record;
 import com.tzld.piaoquan.recommend.server.common.base.Constant;
 import com.tzld.piaoquan.recommend.server.service.odps.ODPSManager;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import com.xxl.job.core.log.XxlJobLogger;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.scheduling.annotation.Scheduled;
 import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
@@ -28,17 +30,19 @@ public class SyncFlowPoolRecentTopVideoJob {
     @Autowired
     private RedisTemplate<String, String> redisTemplate;
 
-    // 每个小时的20分执行
-    @Scheduled(cron = "0 20 * * * ? ")
-    public void syncFlowPoolRecentTopVideo() {
+    @XxlJob("syncFlowPoolRecentTopVideo")
+    public ReturnT<String> syncFlowPoolRecentTopVideo(String params) {
         // 执行 ODPS Sql,获取数据
         List<Long> videoIds = queryTopVideoIdsByLast6Hour(100);
         if (CollectionUtils.isEmpty(videoIds)) {
-            return;
+            XxlJobLogger.log("syncFlowPoolRecentTopVideo, videoIds is empty");
+            return ReturnT.SUCCESS;
         }
+        XxlJobLogger.log("syncFlowPoolRecentTopVideo, videoIds:{}", videoIds);
         // 将数据写入 Redis
         redisTemplate.opsForValue().set(Constant.FLOW_POOL_LAST_24_HOUR_VIDEO_REDIS_KEY,
                 JSONObject.toJSONString(videoIds), 2, TimeUnit.DAYS);
+        return ReturnT.SUCCESS;
     }
 
     private List<Long> queryTopVideoIdsByLast6Hour(Integer topNum) {

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

@@ -28,7 +28,7 @@ spring:
 xxl:
   job:
     admin:
-      addresses: http://127.0.0.1/xxl-job-admin
+      addresses: http://xxl-job-test-internal.piaoquantv.com/xxl-job-admin
     accessToken:
     executor:
       appname: ${spring.application.name}