rabbitmq安装延时队列插件实现延时队列
前言
这个很难查看消息堆积的情况,因为他把要发送的延时消息存在本地的分布式mnesia
数据库中,其次过期时间为最大int
值,超过这个值(大概49
天)得代码判定重复过期设置。
下载插件地址
要注意和自己的rabbitmq的版本对应起来
https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases
我的mq是docker安装的3.9.7的
下载完之后把插件copy
到mq
的plugin
目录下,然后启用插件。之后重启容器,我这里是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安装延时队列插件实现延时队列相关推荐
- RabbitMq安装Web界面插件报错
RabbitMq安装Web界面插件报错 最近在安装rabbitmq-plugins的时候报了以下的错误,一直不知道什么原因,上网百度了很多,自己尝试了很多,总结下来就是这几步,希望可以给大家帮助: 错 ...
- rabbitmq安装和扩展插件
第一步:mkdir package cd package 第二步:将实现下载好的包移动到文件夹yum install socat -y # 安装rabbitmq 需要的插件#安装erlangrpm - ...
- RabbitMQ安装Delayed Message 插件
安装Delayed Message 插件 在官网:https://www.rabbitmq.com/community-plugins.html 点击: 下载好之后就是一个解压好的文件: 然后在将这个 ...
- 【不是拷贝】rabbitmq安装延迟队列插件rabbitmq_delayed_message_exchange
1.查看当前rabbitmq已安装的插件 查看当前的rabbitmq 安装了哪些插件: rabbitmq-plugins list [root@yq-test1 ~]# rabbitmq-plugin ...
- 环境搭建(windows): 1.rabbitmq安装 2.web GUI管理插件安装 3.erlang版本和rabbitmq版本之间对应关系
1)环境搭建参考: https://www.cnblogs.com/wuzhiyuan/p/6845230.html 一:安装RabbitMQ需要先安装Erlang语言开发包,百度网盘地 ...
- 微服务框架 SpringCloud微服务架构 服务异步通讯 51 死信交换机 51.3 延迟队列 51.3.1 延迟队列 51.3.2 延迟队列插件
微服务框架 [SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈课程|黑马程序员Java微服务] 服务异步通讯 文章目录 微服 ...
- docker安装rabbitmq延时队列插件
docker安装rabbitMQ延时队列插件(delayed_message_exchange) 1. 查找Docker容器中的RabbitMQ镜像 docker ps -a [root@linux ...
- Docker安装RabbitMQ并安装延时队列插件
一.RabbitMQ简介 RabbitMQ是由erlang语言开发,基于AMQP(Advanced Message Queue 高级消息队列协议)协议实现的消息队列,它是一种应用程序之间的通信方法,消 ...
- 【外行也能看懂的RabbitMQ系列(四)】—— RabbitMQ进阶篇之通过插件实现延迟队列(内含实现代码及rabbitmq_delayed_message_exchange安装)
系列文章目录 准备篇 RabbitMQ安装文档 第一章 RabbitMQ快速入门篇 第二章 RabbitMQ的Web管理界面详解 第三章 RabbitMQ进阶篇之死信队列 第四章 RabbitMQ进阶 ...
最新文章
- 宽度优先遍历(BFS)
- 猫抓老鼠-Java面向对象特点梳理
- 解决pandas读取含有中文路径下的文件编码错误解决
- zabbix-agent客户端安装
- 动手学pytorch之tensor数据(一)
- window10保存文件时提示联系管理员_东芝2000AC扫描文件到远程域共享服务器
- C# Newtonsoft JArray排序
- EfficientNet与EfficientDet的详解
- MIT | 数据分析、信号处理和机器学习中的矩阵方法 笔记系列: Lecture 8 Norms of Vectors and Matrices
- minimax算法及α-β剪枝算法
- 关于enq: US – contention
- 一个高尚的人,一个纯粹的人,一个有道德的人,一个脱离了低级趣味的人,一个有益于人民的人。...
- 图片报道:2008年12月4日夜晚,暴风雪突袭烟台(下)
- Node.js CQRS 幻灯片系统开发实战-曾亮-专题视频课程
- c++的加密库--crypto++/openssl库
- 高分SCI都在用 P for trend,快来看看吧
- 你的网卡真有千兆么?——千兆网卡传输速度解析
- LaySNS插件—违规关键词检测插件
- 【2013最新XP系统下载】木叶 GhostXP SP3 装机版_2013.09
- 什么是DDOS攻击?
热门文章
- 计算机研究生学校分析报告,2015-2018年全国硕士研究生报考数据分析报告|硕士研究生|数据分析_新浪教育_新浪网...
- php采集程序的方法
- Linux远程连接,ip地址本机可以ping通,但finalshell无法连接的解决方法记录
- Fluent中的网格自适应技术
- 编译mono-unity-2019.3-mbe生成so
- 微软 AI 华人先驱黄学东正式宣布离职,将加入 Zoom 担任 CTO
- 下一代无线网络LTE介绍(转)
- 【51单片机】串行口连接74LS164进行串行/并行转换,输出到一个七段数码管。数码管循环显示0-9。采用串行通信方式0,定时间隔1秒。
- Hibernate瞬时态_持久太_游离态
- 5G通信-帧结构及RE和RB