详解RabbitMQ高级特性之延迟插件的安装和使用

详解RabbitMQ高级特性之延迟插件的安装和使用

目录

延迟队列插件

延迟队列插件的下载

延迟队列插件的安装 

延迟队列插件的启用

​编辑 添加配置

常量类

声明队列和交换机并绑定二者关系

编写生产消息代码

编写消费消息代码

观察效果

面试题


延迟队列插件

RabbitMQ官⽅也提供了⼀个延迟的插件来实现延迟的功能。

延迟队列插件的下载

插件下载链接---》链接

根据⾃⼰的RabbitMQ版本选择相应版本的延迟插件, 下载后上传到服务器。

查看RabbitMQ版本的命令

rabbitmqctl status | grep "RabbitMQ"

 /usr/lib/rabbitmq/plugins 是⼀个附加⽬录, RabbitMQ包本⾝不会在此安装任何内容, 如果
没有这个路径, 可以⾃⼰进⾏创建。

延迟队列插件的安装 

把下载好的 .ez文件上传到   /usr/lib/rabbitmq/plugins  这个路径下。

查看rabbitmq插件的命令

rabbitmq-plugins list
延迟队列插件的启用

启用延迟队列插件的命令

rabbitmq-plugins enable rabbitmq_delayed_message_exchange
 添加配置
spring: application: name: rabbit-extensions-demo rabbitmq: addresses: amqp://study:[email protected]:5672/extension
常量类
public class Constants { //延迟队列 public static final String DELAY_QUEUE = "delay.queue"; public static final String DELAY_EXCHANGE = "delay.exchange"; }
声明队列和交换机并绑定二者关系
import org.springframework.amqp.core.*; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import rabbitextensionsdemo.constant.Constants; @Configuration public class DelayConfig { @Bean("delayQueue") public Queue delayQueue(){ return QueueBuilder.durable(Constants.DELAY_QUEUE).build(); } @Bean("delayExchange") public Exchange delayExchange(){ return ExchangeBuilder.directExchange(Constants.DELAY_EXCHANGE).delayed().build(); } @Bean("delayBinding") public Binding delayBinding(@Qualifier("delayQueue") Queue queue, @Qualifier("delayExchange") Exchange exchange){ return BindingBuilder.bind(queue).to(exchange).with("delay").noargs(); } }
编写生产消息代码
 @RequestMapping("/delay2") public String delay2() { System.out.println("delay2..."); rabbitTemplate.convertAndSend(Constants.DELAY_EXCHANGE, "delay", "delay test 30s...", message -> { message.getMessageProperties().setDelayLong(30000L); //单位: 毫秒, 过期时间为30s return message; }); rabbitTemplate.convertAndSend(Constants.DELAY_EXCHANGE, "delay", "delay test 10s...", message -> { message.getMessageProperties().setDelayLong(10000L); //单位: 毫秒, 延迟时间为10s return message; }); System.out.printf("%tc 消息发送成功 \n", new Date()); return "消息发送成功"; }
编写消费消息代码
import com.rabbitmq.client.Channel; import org.springframework.amqp.core.Message; import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.stereotype.Component; import rabbitextensionsdemo.constant.Constants; import java.util.Date; @Component public class DelayListener { @RabbitListener(queues = Constants.DELAY_QUEUE) public void delayHandMessage(Message message, Channel channel) throws Exception { //消费者逻辑 System.out.printf("[delay.queue] %tc 接收到消息: %s \n", new Date(), new String(message.getBody(),"UTF-8")); } }
观察效果

此时我们可以看到,哪怕把TTL为30秒的消息先于TTL为10秒的消息进行发送,也不会影响根据延迟时间进行消息的发送。

面试题

1.介绍下RabbitMQ的延迟队列

延迟队列是⼀个特殊的队列, 消息发送之后, 并不⽴即给消费者, ⽽是等待特定的时间, 才发送给消费者.

延迟队列的应⽤场景有很多, ⽐如:

1. 订单在⼗分钟内未⽀付⾃动取消
2. ⽤⼾注册成功后, 3天后发调查问卷
3. ⽤⼾发起退款, 24⼩时后商家未处理, 则默认同意, ⾃动退款

但RabbitMQ本⾝并没直接实现延迟队列, 通常有两种⽅法:

1. TTL+死信队列组合的⽅式
2. 使⽤官⽅提供的延迟插件实现延迟功能

2.上面两种实现方法二者对比

1. 基于死信实现的延迟队列
a. 优点: 1) 灵活不需要额外的插件⽀持
b. 缺点: 1) 存在消息顺序问题 2) 需要额外的逻辑来处理死信队列的消息, 增加了系统的复杂性
2. 基于插件实现的延迟队列
a. 优点: 1) 通过插件可以直接创建延迟队列, 简化延迟消息的实现. 2) 避免了DLX的时序问题
b. 缺点: 1) 需要依赖特定的插件, 有运维⼯作 2) 只适⽤特定版本

Read more

【前沿解析】2026年3月5日:AI效率革命的双重突破——Qwen3.5小模型开源与全球首个气溶胶预报AI模型发布

2026年3月5日,AI领域迎来两大重量级突破:阿里通义千问团队开源Qwen3.5系列小模型矩阵,以「百亿级性能、十亿级成本」彻底打破参数内卷;中国科学家团队在全球顶级期刊《自然》发布首个气溶胶预报AI模型AI-GAMFS,实现1分钟完成全球5天高精度环境预报。这两大突破分别代表了AI在「效率优化」和「科学计算」两个关键方向的重大进展,标志着AI技术从规模竞赛向实用落地的历史性转折。 一、导言:从参数竞赛到效率实用主义 2026年开年,全球AI产业呈现出明显的「冰火两重天」格局:一方面,千亿参数大模型的训练成本已突破10亿美元大关,将99%的中小企业和开发者挡在门外;另一方面,端侧AI应用的爆发性需求与高昂部署成本之间的矛盾日益尖锐。在此背景下,阿里通义千问团队于3月5日正式开源Qwen3.5系列小尺寸稠密模型(0.8B/2B/4B/9B),以「智能密度」概念重新定义模型效率标准——普通手机、家用电脑即可流畅运行,9B版本性能直接对标行业主流百B级超大模型。 同日,中国气象科学研究院研究员车慧正和中国工程院院士张小曳团队联合国内外多家研究机构,在国际学术期刊《自

By Ne0inhk
【记录】Github|Github账号意外被封以及不需要手机号解封的全过程(被封原因:一台设备上登录过多个账号)

【记录】Github|Github账号意外被封以及不需要手机号解封的全过程(被封原因:一台设备上登录过多个账号)

文章目录 * 前言 * 解封全过程 * 提交工单 * 页面一 账号微死 * 工单内容 * 页面二 账号微活 * 工单内容 * 毫无感情正经申诉版本(推荐) * 带情绪的申诉版本 * 邮件battle过程 * Round 1:搞清楚怎么被封的 * GitHub Support * 分析 * Round 2: 删除已知小号然后道歉 * Me * 分析 * Round 3: 处理所有小号 * Github Support * 分析 * Me * Round 4: 后续关于follower和fork权限等问题 * Github Support * Me * Github Support * 尾声 前言 一开始被封我以为是我发表了不当言论,因为我刚发一条discussion就被封了,但是后面发现这不是根本原因。应该是之前有人看我【记录】Copilot|Github Copilot重新学生认

By Ne0inhk
最新版 Kimi K2.5 进阶实战全攻略:从开源部署到 Agent 集群搭建(视频理解 + 多模态开发 + 高并发调优)

最新版 Kimi K2.5 进阶实战全攻略:从开源部署到 Agent 集群搭建(视频理解 + 多模态开发 + 高并发调优)

1 技术背景与核心架构原理 1.1 技术定位与版本说明 Kimi K2.5 是月之暗面于2026年初发布的开源多模态大语言模型,聚焦长上下文理解、原生多模态交互、Agent 原生支持三大核心能力,针对工业级落地场景完成了全链路优化。本次实战覆盖的开源版本包括: * kimi-k2.5-chat-70b:基础对话版,支持2000K token 上下文窗口,原生适配工具调用 * kimi-k2.5-multimodal-70b:多模态完整版,新增图像、长视频时序理解能力,支持最长10小时连续视频输入 * kimi-k2.5-agent-70b:Agent 优化版,强化多轮工具链执行、分布式状态同步能力,适配集群化部署 * 量化衍生版本:AWQ 4bit/8bit、FP8 量化版,适配低显存硬件环境,精度损失控制在1%以内 1.2 核心架构与技术亮点 1.2.1

By Ne0inhk
最强开源多模态大模型它来啦——一文详解Qwen3.5核心特性

最强开源多模态大模型它来啦——一文详解Qwen3.5核心特性

前言 各位小伙伴新年好!新的一年祝大家龙马精神、阖家幸福、身体健康、事业进步!2025 年 DeepSeek 发布的 DeepSeek-R1 模型震惊全球,此后国内各大厂商充分发挥“能征善战”的拼劲,纷纷选择重大节日推出新品。今年除夕夜,阿里 Qwen 团队再次放出大招——Qwen3.5 模型正式开源,为国产大模型阵营再添一员猛将。 Qwen3.5 是目前全球最强的原生多模态开源大模型,不仅支持图片和视频的多模态输入,在对话、推理、编程、Agent 构建等方面也样样精通。其综合能力已达到 GPT-5.2、Gemini 3.0 Pro 的平均水平,推理能力尤为突出。例如那道曾让无数模型“翻车”的逻辑题——“50 米距离该走路还是开车去洗车”,Qwen3.5 也能轻松作答。

By Ne0inhk