lianshufeng 1 år sedan
förälder
incheckning
22c89851d4

+ 6 - 1
components/data/MongodbData/src/main/java/com/github/microservice/components/data/mongo/queue/domain/ExecQueue.java

@@ -8,6 +8,7 @@ import lombok.NoArgsConstructor;
 import org.springframework.data.mongodb.core.index.Indexed;
 import org.springframework.data.mongodb.core.mapping.Document;
 
+import java.util.Date;
 import java.util.Map;
 
 @Data
@@ -29,7 +30,7 @@ public class ExecQueue extends SuperEntity {
     private int currentTryCount;
 
     // 数据
-    private Map<String,Object> data;
+    private Map<String, Object> data;
 
 
     // 处理事件的代码
@@ -44,6 +45,10 @@ public class ExecQueue extends SuperEntity {
     @Indexed
     private long workTime;
 
+    // 过期时间
+    @Indexed(expireAfterSeconds = 0)
+    private Date TTL;
+
 
     /**
      * 队列的状态

+ 12 - 1
components/data/MongodbData/src/main/java/com/github/microservice/components/data/mongo/queue/service/ExecQueueService.java

@@ -10,7 +10,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 import org.springframework.util.Assert;
 
+import java.util.Date;
 import java.util.Map;
+import java.util.Optional;
 
 @Component
 public class ExecQueueService {
@@ -32,19 +34,28 @@ public class ExecQueueService {
      * @return
      */
     public String add(Map<String, Object> data, int maxTryCount, ExecQueueEvent execQueueEvent) {
+        return this.add(data, maxTryCount, execQueueEvent, null);
+    }
+
+
+    public String add(Map<String, Object> data, int maxTryCount, ExecQueueEvent execQueueEvent, Long ttlTime) {
         Assert.state(maxTryCount > 0, "最大尝试次数必须大于0");
         Assert.notNull(execQueueEvent, "事件不能为空");
 
         final ExecQueue execQueue = new ExecQueue();
         execQueue.setData(data);
-//        execQueue.setEventClass(eventClass.getName());
 
+        // 事件
         execQueue.setExecQueueEvent(SerializationUtils.serialize(execQueueEvent));
 
+        // 初始化参数
         execQueue.setCurrentTryCount(0);
         execQueue.setMaxTryCount(maxTryCount);
         execQueue.setStatus(ExecQueue.ExecQueueStatus.Wait);
 
+        // 设置过期时间
+        Optional.ofNullable(ttlTime).ifPresent(it -> execQueue.setTTL(new Date(System.currentTimeMillis() + it)));
+
         // 更新下次执行时间
         this.updateNextExecTime(execQueue);