前言

这个很难查看消息堆积的情况,因为他把要发送的延时消息存在本地的分布式mnesia数据库中,其次过期时间为最大int值,超过这个值(大概49天)得代码判定重复过期设置。

下载插件地址

要注意和自己的rabbitmq的版本对应起来
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

我的mq是docker安装的3.9.7的

下载完之后把插件copymqplugin目录下,然后启用插件。之后重启容器,我这里是docker-compose安装的

rabbitmq-plugins enable rabbitmq_delayed_message_exchange
docker-compose restart


进入rabbitmq管理页面查看插件是否安装成功

Type里面查看是否有x-delayed-message选项,如果存在就代表插件安装成功。

使用mq延时队列插件下springboot实现延时队列

yaml配置mq,然后在mq管理页面创建虚拟host:fchan

spring:rabbitmq:host: 110.40.181.73port: 35672username: rootpassword: 10086virtual-host: /fchan

配置延时队列和延时交换机的绑定

package com.fchan.mq.mqDelay;import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.CustomExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;import java.util.HashMap;
import java.util.Map;@Configuration
public class MqDelayConfig {//最后经过死信队列转发后实际消费的交换机private static final String EXCHANGE_NAME = "delayed_exchange";//最后经过死信队列转发后实际消费的队列private static final String QUEUE_NAME = "delayed_queue";//最后经过死信队列转发后实际消费的路由keyprivate static final String ROUTE_KEY = "delayed_key";/*** 交换机*/@BeanCustomExchange exchange() {//通过x-delayed-type参数设置fanout /direct / topic / header 类型Map<String, Object> args = new HashMap<>();args.put("x-delayed-type", "direct");return new CustomExchange(EXCHANGE_NAME, "x-delayed-message",true, false,args);}/*** 队列*/@Beanpublic Queue queue() {return new Queue(QUEUE_NAME,true,false,false);}/*** 将队列绑定到交换机*/@Beanpublic Binding binding(CustomExchange exchange, Queue queue) {return BindingBuilder.bind(queue).to(exchange).with(ROUTE_KEY).noargs();}
}

消息生产者

package com.fchan.mq.mqDelay;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.MessageDeliveryMode;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Component
public class MyRabbitSender {Logger log = LoggerFactory.getLogger(MyRabbitSender.class);private static final String ROUTE_KEY = "delayed_key";private static final String EXCHANGE_NAME = "delayed_exchange";@Autowiredprivate RabbitTemplate rabbitTemplate;/*** @param msg   消息* @param delay 延时时间,秒*/public void send2(String msg, int delay) {log.info("RabbitSender.send() msg = {}", msg);rabbitTemplate.convertAndSend(EXCHANGE_NAME, ROUTE_KEY, msg, message -> {message.getMessageProperties().setDeliveryMode(MessageDeliveryMode.PERSISTENT);  //消息持久化message.getMessageProperties().setDelay(delay * 1000);   // 单位为毫秒return message;});}
}

消息消费者

package com.fchan.mq.mqDelay;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.stereotype.Component;@Component
public class MyRabbitConsume {Logger log = LoggerFactory.getLogger(MyRabbitConsume.class);@RabbitListener(queues = "delayed_queue")public void infoConsumption(String data) throws Exception {log.info("收到信息:{}",data);log.info("然后进行一系列逻辑处理 Thanks♪(・ω・)ノ");}
}

参考了大佬的博文
https://juejin.cn/post/6977516798828609567#heading-13

rabbitmq安装延时队列插件实现延时队列相关推荐

  1. RabbitMq安装Web界面插件报错

    RabbitMq安装Web界面插件报错 最近在安装rabbitmq-plugins的时候报了以下的错误,一直不知道什么原因,上网百度了很多,自己尝试了很多,总结下来就是这几步,希望可以给大家帮助: 错 ...

  2. rabbitmq安装和扩展插件

    第一步:mkdir package cd package 第二步:将实现下载好的包移动到文件夹yum install socat -y # 安装rabbitmq 需要的插件#安装erlangrpm - ...

  3. RabbitMQ安装Delayed Message 插件

    安装Delayed Message 插件 在官网:https://www.rabbitmq.com/community-plugins.html 点击: 下载好之后就是一个解压好的文件: 然后在将这个 ...

  4. 【不是拷贝】rabbitmq安装延迟队列插件rabbitmq_delayed_message_exchange

    1.查看当前rabbitmq已安装的插件 查看当前的rabbitmq 安装了哪些插件: rabbitmq-plugins list [root@yq-test1 ~]# rabbitmq-plugin ...

  5. 环境搭建(windows): 1.rabbitmq安装 2.web GUI管理插件安装 3.erlang版本和rabbitmq版本之间对应关系

    1)环境搭建参考: https://www.cnblogs.com/wuzhiyuan/p/6845230.html​​​​​​​ 一:安装RabbitMQ需要先安装Erlang语言开发包,百度网盘地 ...

  6. 微服务框架 SpringCloud微服务架构 服务异步通讯 51 死信交换机 51.3 延迟队列 51.3.1 延迟队列 51.3.2 延迟队列插件

    微服务框架 [SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务] 服务异步通讯 文章目录 微服 ...

  7. docker安装rabbitmq延时队列插件

    docker安装rabbitMQ延时队列插件(delayed_message_exchange) 1. 查找Docker容器中的RabbitMQ镜像 docker ps -a [root@linux ...

  8. Docker安装RabbitMQ并安装延时队列插件

    一.RabbitMQ简介 RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消 ...

  9. 【外行也能看懂的RabbitMQ系列(四)】—— RabbitMQ进阶篇之通过插件实现延迟队列(内含实现代码及rabbitmq_delayed_message_exchange安装)

    系列文章目录 准备篇 RabbitMQ安装文档 第一章 RabbitMQ快速入门篇 第二章 RabbitMQ的Web管理界面详解 第三章 RabbitMQ进阶篇之死信队列 第四章 RabbitMQ进阶 ...

最新文章

  1. 宽度优先遍历(BFS)
  2. 猫抓老鼠-Java面向对象特点梳理
  3. 解决pandas读取含有中文路径下的文件编码错误解决
  4. zabbix-agent客户端安装
  5. 动手学pytorch之tensor数据(一)
  6. window10保存文件时提示联系管理员_东芝2000AC扫描文件到远程域共享服务器
  7. C# Newtonsoft JArray排序
  8. EfficientNet与EfficientDet的详解
  9. MIT | 数据分析、信号处理和机器学习中的矩阵方法 笔记系列: Lecture 8 Norms of Vectors and Matrices
  10. minimax算法及α-β剪枝算法
  11. 关于enq: US – contention
  12. 一个高尚的人,一个纯粹的人,一个有道德的人,一个脱离了低级趣味的人,一个有益于人民的人。...
  13. 图片报道:2008年12月4日夜晚,暴风雪突袭烟台(下)
  14. Node.js CQRS 幻灯片系统开发实战-曾亮-专题视频课程
  15. c++的加密库--crypto++/openssl库
  16. 高分SCI都在用 P for trend,快来看看吧
  17. 你的网卡真有千兆么?——千兆网卡传输速度解析
  18. LaySNS插件—违规关键词检测插件
  19. 【2013最新XP系统下载】木叶 GhostXP SP3 装机版_2013.09
  20. 什么是DDOS攻击?

热门文章

  1. 计算机研究生学校分析报告,2015-2018年全国硕士研究生报考数据分析报告|硕士研究生|数据分析_新浪教育_新浪网...
  2. php采集程序的方法
  3. Linux远程连接,ip地址本机可以ping通,但finalshell无法连接的解决方法记录
  4. Fluent中的网格自适应技术
  5. 编译mono-unity-2019.3-mbe生成so
  6. 微软 AI 华人先驱黄学东正式宣布离职,将加入 Zoom 担任 CTO
  7. 下一代无线网络LTE介绍(转)
  8. 【51单片机】串行口连接74LS164进行串行/并行转换,输出到一个七段数码管。数码管循环显示0-9。采用串行通信方式0,定时间隔1秒。
  9. Hibernate瞬时态_持久太_游离态
  10. 5G通信-帧结构及RE和RB