跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
Javajava

RabbitMQ 延迟队列插件安装与使用详解

综述由AI生成RabbitMQ 延迟队列插件的下载、安装及启用方法,并通过 Spring Boot 示例代码演示了如何声明延迟交换机、队列及绑定关系。内容涵盖生产消息设置延迟时间、消费消息接收逻辑,以及对比死信队列实现方式的优缺点,适用于订单超时取消等场景。

鲜活发布于 2026/3/27更新于 2026/6/522 浏览
RabbitMQ 延迟队列插件安装与使用详解

文章配图

延迟队列插件

RabbitMQ 官方提供了一个延迟插件来实现延迟功能。

延迟队列插件的下载

插件下载地址:GitHub Releases

根据自己的 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://guest:guest@localhost:5672/
常量类
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. 基于死信实现的延迟队列
    • 优点:灵活不需要额外的插件支持
    • 缺点:存在消息顺序问题;需要额外的逻辑来处理死信队列的消息,增加了系统的复杂性
  2. 基于插件实现的延迟队列
    • 优点:通过插件可以直接创建延迟队列,简化延迟消息的实现;避免了 DLX 的时序问题
    • 缺点:需要依赖特定的插件,有运维工作;只适用特定版本

目录

  1. 延迟队列插件
  2. 延迟队列插件的下载
  3. 延迟队列插件的安装
  4. 延迟队列插件的启用
  5. 添加配置
  6. 常量类
  7. 声明队列和交换机并绑定二者关系
  8. 编写生产消息代码
  9. 编写消费消息代码
  10. 观察效果
  11. 面试题
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Kafka 简介、核心原理与典型使用场景
  • AI 绘画风格融合技术指南与参数配置
  • Python 基于关键词爬取小红书笔记数据脚本
  • AI 与存储结合:智能存储实践与挑战
  • DeepSeek 系列版本演进:从 V1 到 R1 的核心差异与选型指南
  • 云电脑部署 DeepSeek 横向对比:ToDesk、顺网云与海马云性能测试
  • AIGC 个性化与定制化内容生成:技术与应用
  • LeetCode 热题 100 快速通关指南与核心算法模板
  • 使用 LLaMA Factory 定制 AI 绘画提示词生成器
  • Springer Nature 高影响力图书合集:专业应用计算与计算机科学
  • Ubuntu 24.04 LTS 安装 NVIDIA 显卡驱动、CUDA 12.5 及 Docker 容器工具包
  • ChatGLM3 大模型本地化部署、应用开发与微调实战指南
  • 构建基于 Rust 与 GLM-5 的高性能 AI 翻译 CLI 工具
  • AI 辅助编程工作流实践:Python 自动化处理 Excel 数据
  • 微信指挥 AI 员工:QClaw 本地部署与实战指南
  • llama.cpp 量化模型部署实战:从模型转换到 API 服务
  • 9种降低论文AIGC检测率的工具推荐与使用指南
  • 华三 H3C 交换机 NTP 时钟配置指南(CLI 与 WEB)
  • 城市场景下无人机三维路径规划的多目标粒子群优化算法 NMOPSO
  • 代码生成 Prompt:从自然语言描述到完整函数

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online