package com.kym.service.jobs;

import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.context.event.EventListener;

/**
 * @author skyline
 * @description
 * @date 2023-10-08 21:41
 */
public interface DelayService<T> {
    // 这里不能使用@PostConstruct，在初始化完成后, bean 进入增强阶段, 所以这个阶段的任何AOP都是无效的,https://www.cnblogs.com/eternityz/p/15330069.html
    @EventListener
    void init(ContextRefreshedEvent event);

    /**
     * 添加延迟对象到延时队列
     *
     * @param delayedItem 延迟对象
     * @return boolean
     */
    boolean addToDelayQueue(DelayedItem<T> delayedItem);

    /**
     * 根据对象添加到指定延时队列
     *
     * @param data 数据对象
     * @return boolean
     */
    boolean addToDelayQueue(T data);

    /**
     * 移除指定的延迟对象从延时队列中
     *
     * @param id
     */
    boolean removeFromDelayQueue(Object id);

}
