【无标题】Delayed延迟队列不工作

背景

项目中使用java 自带的延迟队列Delayed,只有添加进队列的消息,并没有被消费到

版本

jdk1.8

问题原因

上一个消费队列出现异常并且没有捕获,下一个队列就没有进行消费

复现代码

没有抛异常的情况下

package com.ccb.core.config.delay;import lombok.Data;import java.util.concurrent.Delayed;
import java.util.concurrent.TimeUnit;/*** 防护舱延迟对象** @author sz* @version 1.0* @date 2023-02-10 15:47*/
@Data
public class TestDelay implements Delayed {private  String seqId;/***过期时间*/private Long expireTime;@Overridepublic long getDelay(TimeUnit unit) {return unit.convert(this.expireTime - System.currentTimeMillis() , TimeUnit.MILLISECONDS);}@Overridepublic int compareTo(Delayed other) {if (other == this){return 0;}if(other instanceof TestDelay){TestDelay otherRequest = (TestDelay)other;long otherStartTime = otherRequest.expireTime;return (int)(this.expireTime - otherStartTime);}return 0;}
}
package com.ccb.core.config.delay;import com.ccb.core.common.util.DateUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.concurrent.DelayQueue;
import java.util.concurrent.Executor;/*** @author sz* @version 1.0* @date 2023-10-08 19:12*/
@Slf4j
@Component
public class ProtectDelayTestComponent {private static DelayQueue<TestDelay> delayQueue = new DelayQueue<TestDelay>();@Resource(name = "poiExecutor")private Executor poiExecutor;/*** 系统启动时,预先加载的数据@PostConstruct*/@PostConstructpublic void init(){log.info("线程进入ProtectDelayTestComponent***************init");poiExecutor.execute(() -> {while(true){try {TestDelay protectDelay = delayQueue.take();log.info("获取到的延迟队列信息:{}", protectDelay);} catch (InterruptedException e) {e.printStackTrace();}}});}/*** 加入延时队列**/public boolean addDelayQueue(TestDelay protectDelay){log.info("添加进延迟队列信息为{},对应的过期时间为:{}",protectDelay, DateUtil.convertTimeToString(protectDelay.getExpireTime(),"yyyy-MM-dd HH:mm:ss"));return delayQueue.add(protectDelay);}
}

写TestController 测试正常的添加进入延迟队列

  @GetMapping("/test/testProtectDelay")@ApiModelProperty("测试批量死信队列")public RespData testProtectDelay(){TestDelay protectDelay =new TestDelay();String s = UuidUtils.generateUuid();log.info("testProtectDelay的参数:{}",s);protectDelay.setSeqId(s);protectDelay.setExpireTime(System.currentTimeMillis()+10*1000);protectDelayTestComponent.addDelayQueue(protectDelay);return RespData.success();}

正常运行结果
在这里插入图片描述

手动抛出异常后

在这里插入图片描述

解决方案

在take中捕获Exception ,可以继续消费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/127841.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序button按钮去除边框去除背景色

button边框 去除button边框 在button上添加plain“true”在css中添加button.avatar-wrapper {background: none}用于去除button背景色在css中添加button.avatar-wrapper[plain]{ border:0 }用于去除button边框

MySQL增删查改(进阶1)

一、数据库约束 约束&#xff1a;按照一定条件进行规范的做事&#xff1b; 表定义的时候&#xff0c;某些字段保存的数据需要按照一定的约束条件&#xff1b; 1.null约束 字段null&#xff1a;该字段可以为空&#xff1b;not null&#xff1a;该字段不能为空不指定的话就是…

一篇理解网络分层原理

一、网络分层的必要性。 如图是一个数据的传输过程&#xff0c;在这个途中会有很多的原因导致数据丢失&#xff0c;网络分层就要可以很大程度的避免这个现象。 网络分层的必要性体现在以下几个方面&#xff1a; 抽象复杂度&#xff1a;网络分层将网络功能按照不同的层次进行分…

自动定时删除磁盘文件的脚本(从文件日期最早的开始删)

#!/bin/bash# 指定的挂载点 MOUNTPOINT"/media/vm/MyDisk512GB"# 设置磁盘大小的限制 (例如&#xff1a;800G) LIMIT$((800 * 1024 * 1024)) # 单位是KB# 获取挂载点的已使用空间 USED_SPACE$(df -kP "$MOUNTPOINT" | tail -1 | awk {print $3})echo &quo…

golang gin——文件上传(单文件,多文件)

文件上传 单文件上传 从form-data获取文件 package uploadimport ("github.com/gin-gonic/gin""net/http" ) // 单文件上传&#xff0c;多文件上传 func Upload(c *gin.Context) {file, _ : c.FormFile("file") // file为字段名dst : "…

Excel·VBA使用ADO读取工作簿工作表数据

目录 查询遍历写入数组查询整体写入数组查询工作簿所有工作表名称查询工作簿所有工作表数据 不打开工作簿读取数据&#xff0c;以下举例都为《ExcelVBA合并工作簿》中 7&#xff0c;合并子文件夹同名工作簿中同名工作表&#xff0c;纵向汇总数据所举例的工作簿&#xff0c;使用…

【Java 进阶篇】HTML介绍与软件架构相关知识详解

HTML&#xff08;Hypertext Markup Language&#xff09;是一种用于创建网页的标记语言。它是互联网上信息传递和展示的基础&#xff0c;无论是在浏览器中查看网页还是在移动设备上浏览应用程序&#xff0c;HTML都扮演着关键角色。本文将向您介绍HTML的基础知识&#xff0c;并探…

钡铼BL124EC实现EtherCAT转Ethernet/IP的优势

钡铼技术的BL124EC是一款用于将EtherCAT从站转换为Ethernet/IP从站的网关设备。它是钡铼技术开发的高性能、可靠的工业自动化通信解决方案之一。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; BL124EC网关可以应用于多种工业自动化场景&#xff0c;以下…

12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller

12P4375X042-233C KJ2005X1-BA1 CE3007 EMERSON servo controller 我们提供三种不同类别的EDGEBoost I/O模块供选择&#xff0c;以实现最大程度的I/O定制: 数字和模拟输入/输出网络和连接边缘人工智能和存储 利用EDGEBoost I/O实现变革性技术 EBIO-2M2BK EBIO-2M2BK载板支持…

深度学习笔记之线性代数

深度学习笔记之线性代数 一、向量 在数学表示法中&#xff0c;向量通常记为粗体小写的符号&#xff08;例如&#xff0c;x&#xff0c;y&#xff0c;z&#xff09;当向量表示数据集中的样本时&#xff0c;它们的值具有一定的现实意义。例如研究医院患者可能面临的心脏病发作风…

常用排序算法详解

1.冒泡排序原理示例代码实现 2.快速排序原理示例代码实现 3.插入排序原理示例代码实现 4.希尔排序原理示例代码实现 5.选择排序原理示例代码实现 6.堆排序原理示例代码实现 7.归并排序原理示例代码实现 本文讲述了常见的排序算法的执行过程&#xff0c;有详细实现过程举例 1.冒…

21.6 CSS 弹性布局

1. 弹性盒子 CSS弹性盒子(Flexbox)是一种布局模型, 用于创建灵活的, 自适应的网页布局. 它的目的是在不同屏幕尺寸和设备上实现一致的布局效果.引入弹性盒布局模型的目的是提供一种更加有效的方式来对一个容器中的子元素进行排列, 对齐和分配空白空间.弹性容器通过设置display…