首页 > 其他分享 >本地延迟队列

本地延迟队列

时间:2022-11-02 13:55:33浏览次数:40  
标签:NotificationResult 队列 queue 本地 DelayQueue public 延迟

本地延迟队列

DelayQueue是无界的

特殊注意: 放入DelayQueue队列中的数据必须实现Delay接口,可以通过指定方法获取到是否到执行时间及比较运算逻辑

1.定义本地延迟队列

@Slf4j
@Component
public class NotificationHisRetryQueue {

    private DelayQueue<NotificationResult> queue;
    @PostConstruct
    public void init() {
        queue = new DelayQueue<>();
    }

    public void push(NotificationResult data) {
        queue.offer(data);
    }

    public BlockingQueue<NotificationResult> getQueue() {
        return queue;
    }
}

2.NotificationResult实现接口Delayed

@AllArgsConstructor
@NoArgsConstructor
@Data
@Builder
class NotificationResult implements Delayed{
	Long runAt;

    @Override
    public long getDelay(TimeUnit unit) {
        return unit.convert(this.runAt - System.currentTimeMillis(),TimeUnit.MILLISECONDS);
    }

    @Override
    public int compareTo(Delayed o) {
        NotificationResult object  = (NotificationResult) o;
        return this.runAt.compareTo(object.runAt);
    }

}

3. 队列里生产数据

// 按照默认延迟30s的数据进行生产
// 只有30s到期的数据才会被取出
public void pushLocalRetryQueue(NotificationResult notificationResult){
        log.info("通知历史{}入mq失败,进入本地重试队列,延迟30秒后进行重试",notificationResult);
        notificationResult.setRunAt(System.currentTimeMillis() + 1000 * 30);
        notificationHisRetryQueue.push(notificationResult);
    }

4.队列消费数据

NotificationResult result = notificationHisRetryQueue.getQueue().take();

标签:NotificationResult,队列,queue,本地,DelayQueue,public,延迟
From: https://www.cnblogs.com/PythonOrg/p/16850788.html

相关文章

  • 数据结构【完整代码】之(C语言实现【栈与队列】实现括号匹配([{ )
    本文包含两个文件的代码和两张测试效果图:StackAndQueue.h文件:用于存储信息:存放函数、结构体、栈的函数实现、变量名等blockMatch.cpp文件:用于测试效果图:(位于最上方)测试图:S......
  • 数据结构【完整代码】之(C语言实现【栈与队列】实现男女舞伴配对)
    本文包含两个文件的代码和一张测试效果图:StackAndQueue.h文件:用于存储信息:存放函数、结构体、栈的函数实现、变量名等danceMatch.cpp文件:用于测试效果图:(位于最上方)效果图:S......
  • 基本地形因子的提取和DEM的可视化
    基本地形因子的提取和DEM的可视化目录基本地形因子的提取和DEM的可视化试验目的实验环境与准备实验内容和步骤坡度、坡向的提取坡度坡向变率的提取坡度变化率坡向变化率的......
  • 消息队列
    一、定义消息队列是为了分配任务,避免大量的并发请求过多过快的消耗服务器资源,从而优化产品的性能,这样的话,多线程或者多进程,又或者协程等等都是可以达到优化的目的二、类......
  • 用栈实现队列
    classMyQueue{public:stack<int>stIn;stack<int>stOut;MyQueue(){}voidpush(intx){stIn.push(x);}//从......
  • 406.queue-reconstruction-by-height 根据身高重建队列
    问题描述406.根据身高重建队列解题思路首先根据身高对数组重新排序,再根据ki进行插入操作。排序时,需要对排序的比较方法重写,参见C++sort排序函数用法。同时,考虑到基于......
  • POM 引入本地jar
    <dependency><groupId>SVSClient</groupId><artifactId>SVSClient</artifactId><version>2.8</version><scope>system</scope><systemPath>${pr......
  • JS/TS数据结构---栈(单调栈)和队列
    一、栈栈(stack)是一种操作受限的线性表数据结构,基于后进先出(LIFO)策略的集合类型,例如函数中的临时变量符合后进先出的特性,因此用栈保存最合适。  在入栈和出栈过程中所需......
  • yum localinstall 解决本地rpm包的依赖问题,以及yum 命令常用方法
    摘自:https://blog.csdn.net/heshouyou/article/details/66971116 今天在Fedora12上安装VBox的时候遇到一点麻烦,还好yum localinstall帮我轻松的解决这个问题.[Blinux......
  • 游戏服务器架构:如何避免缓存积累延迟
    不管使用TCP还是KCP,你都不可能超越信道限制的发送数据。TCP的发送窗口SNDBUF决定了最多可以同时发送多少数据,KCP的也一样。当前发送且没有得到ACK/UNA确认的数据,都会......