RabbitMq TTL+死信队列 延迟消息问题记录 - 综合 -

当前位置:首页  >  综合  > 正文

RabbitMq TTL+死信队列 延迟消息问题记录

RabbitMq TTL+死信队列 延迟消息问题记录
2023-02-24 13:20:52 来源:腾讯云

延迟队列存储的对象是对应的延迟消息,所谓的延迟消息是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费

利用RabbitMqTTL和死信队列 来实现延时消费。

如果设置的是队列统一过期时间放到死信队列,没有什么问题。


(资料图)

如果是延时时间设置到每条消息上的。而不是给队列的。

实现方式为消息存活时间为动态用户页面可配置的。

这就导致了一个问题:

先用一条消息的存活时间是1天。后面又进了一条消息存活时间是1小时。

结果一小时到了,发现这条消息并没有被转发到消费延时过期消息的队列。

原因是尽管ttl是设给每条消息的。但是本质上,所有延时消息都还在一个队列里,对它过期时间的检测也是从头部开始的。

它不会检测每一条消息是否过期。而是顺序检测。

如果first in的消息过期时间很长,会导致它阻塞后进的消息。

不仅无法实现真正的过期时间。还会导致,一个大的过期时间的先进的消息,会堆积一堆后进的过期时间短的消息。

问题解决

这个时候可以使用rabbitMq的一个插件:rabbitmq_delayed_message_exchange

一段时间以来,人们一直在寻找用RabbitMQ实现延迟消息的传递方法,到目前为止,公认的解决方案是混合使用TTL和DLX。而rabbitmq_delayed_message_exchange插件就是基于此来实现的,RabbitMQ延迟消息插件新增了一种新的交换器类型,消息通过这种交换器路由就可以实现延迟发送

插件安装

需要根据自己的rabbitMq选择对应的版本。我rabbitMq的版本是RabbitMQ 3.11.0,对应的插件版本就是:3.11.1

基于Linux

--1、cd到rabbitmq默认安装位置cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.7.18/plugins--2、通过ftp工具将插件上传到此目录下--3、开启插件rabbitmq-plugins enable rabbitmq_delayed_message_exchange--4、重启MQ服务systemctl restart rabbitmq-server

基于Docker

--1、通过ftp工具将插件上传到Linux服务器的根目录下--2、拷贝到docker中rabbitmq插件目录下,rabbitmq_delayed_message_exchange-3.9.0.ez(下载包的全名)docker cp /rabbitmq_delayed_message_exchange-3.9.0.ez 容器ID:/plugins--3、进入容器docker exec -it 容器id /bin/bash--4、查看插件是否存在(确保2中的操作已经将插件拷贝过来了)cd pluginsls |grep delay--5、开启插件rabbitmq-plugins enable rabbitmq_delayed_message_exchange--6、退出容器exit--7、重启MQ服务docker restart 容器ID

安装成功

web界面新建交换机选择类型出现红框标注即表示成功

image.png

代码实现

1:springBoot配置

@Configurationpublic class DelayRabbitmqConfig {     /**     * 声明延迟队列     * @return     */    @Bean    public Queue delayQueue(){        return new Queue(QueueConstant.DelayQueue,                true,false,false);    }     /**     * 声明延迟自定义交换机类型     * @return     */    @Bean    public CustomExchange delayCustomExchange(){        HashMap args = new HashMap<>();//        设置 x-delayed-type 为 direct,当然也可以是 topic 等 发送消息时设置消息头 headers 的 x-delay 属性,即延迟时间,如果不设置消息将会立即投递        args.put("x-delayed-type","direct");        return new CustomExchange(ExchangeConstant.DelayCustomerExchange,                "x-delayed-message",true,false,args);    }     /**     * 绑定延迟交换机和队列     * @return     */    @Bean    public Binding delayQueueAndCustomExchange(){        return BindingBuilder.bind(delayQueue())                .to(delayCustomExchange()).with(RoutingKeyConstant.DelayCustomerRoutingKey).noargs();    }}

springMvc配置

引入依赖:    xmlns:util="http://www.springframework.org/schema/util"    http://www.springframework.org/schema/util    http://www.springframework.org/schema/util/spring-util-4.0.xsd                                                                                                                

代码实现

//消息发送final MessagePostProcessor messagePostProcessor = new MyMessagePostProcessor(Integer.valueOf(ttl.toString()));DisTimingPushDto disTimingPushDto = new DisTimingPushDto();disTimingPushDto.setOrderId(dispense.getOrderId());disTimingPushDto.setPushTime(disDispense.getPushTime());rabbitTemplate.convertAndSend(MsgQueueEnum.TIMING_PUSH.getExchangeName(), MsgQueueEnum.TIMING_PUSH.getQueueName(), disTimingPushDto, messagePostProcessor);//每条消息时间配置import org.springframework.amqp.AmqpException;import org.springframework.amqp.core.Message;import org.springframework.amqp.core.MessagePostProcessor;/** * 延迟消息处理器 Processor * @author king * @date 2022年12月28日 11:14 */public class MyMessagePostProcessor implements MessagePostProcessor {    /**     * 消息延迟时间,单位:毫秒     */    private final Integer TTL;    public MyMessagePostProcessor(final Integer ttl) {        this.TTL = ttl;    }    @Override    public Message postProcessMessage(Message message) throws AmqpException {        message.getMessageProperties().setDelay(TTL);        return message;    }}

标签: RabbitMQ

(责任编辑:news01)
宁波市第一医院:未发布“新冠后要像坐月子一样休养”提示 全球热推荐

宁波市第一医院:未发布“新冠后要像坐月子一样休养”提示 全球热推荐

据宁波日报报道,网上传出消息称:“宁波市第一医院提示,新冠不是一般的感冒,感染者要像坐月子一样休...
01-04 17:32:20
《央视财经评论》:“上调预期 看好中国” 外资的嗅觉与逻辑_世界热消息

《央视财经评论》:“上调预期 看好中国” 外资的嗅觉与逻辑_世界热消息

来源:央视财经岁末年初,外资机构纷纷发布对中国2023年的经济预测,相关报告中最多的关键词就是“反弹...
01-04 15:17:36
数读科创板IPO|中科合成:主营煤制油催化剂 控股股东股权分散 最新快讯

数读科创板IPO|中科合成:主营煤制油催化剂 控股股东股权分散 最新快讯

《科创板日报》1月4日讯中科合成科创板IPO申请已获受理。本次IPO,公司拟募资8 25亿元,用于煤制油催化...
01-04 11:20:40
湖南:新年伊始忙施工 产业项目抢开局

湖南:新年伊始忙施工 产业项目抢开局

湖南:新年伊始忙施工产业项目抢开局
01-04 08:48:12
1月3日基金净值:华夏高端制造混合A最新净值1.476,涨2.86%

1月3日基金净值:华夏高端制造混合A最新净值1.476,涨2.86%

1月3日,华夏高端制造混合A最新单位净值为1 476元,累计净值为1 476元,较前一交易日上涨2 86%。历史...
01-04 01:05:02
欣天科技:12月30日公司高管孙海龙减持公司股份合计2万股 环球微资讯

欣天科技:12月30日公司高管孙海龙减持公司股份合计2万股 环球微资讯

证券之星讯,根据1月3日市场公开信息、上市公司公告及交易所披露数据整理,欣天科技(300615)最新董监...
01-03 19:02:51
首个日化产品除螨团标发布,满婷阐释国货品牌科技力

首个日化产品除螨团标发布,满婷阐释国货品牌科技力

近年来,学界对于尘螨的研究渐趋热门,“除螨”在社交媒体上也成为了热点话题,仅在抖音一个平台,相关...
01-03 16:02:30
2023年度郑州居民医保缴费方式

2023年度郑州居民医保缴费方式

2023年度郑州居民医保缴费方式1、通过“郑好办”手机APP缴费。(税务一件事→城乡居民医疗保险缴费)2、通...
01-03 12:53:18
XBB.1.5对我国影响有多大?专家详解 环球百事通

XBB.1.5对我国影响有多大?专家详解 环球百事通

研究显示,XBB 1 5的免疫逃逸能力与XBB 1相当,但关键突变F486P使其具有更高的人ACE2受体结合亲和力...
01-03 10:54:41
中国外汇交易中心调整CFETS人民币汇率指数、SDR货币篮子人民币汇率指数货币篮子权重

中国外汇交易中心调整CFETS人民币汇率指数、SDR货币篮子人民币汇率指数货币篮子权重

调整CFETS人民币汇率指数的货币篮子权重  CFETS人民币汇率指数的货币篮子权重是采用考虑转口贸易因素...
12-30 19:01:47
庄园牧场(002910)12月30日主力资金净卖出945.60万元-今日快讯

庄园牧场(002910)12月30日主力资金净卖出945.60万元-今日快讯

截至2022年12月30日收盘,庄园牧场(002910)报收于15 15元,上涨2 99%,换手率15 84%,成交量27 09万手,成交额3 99亿元。
12-30 16:08:49
视点!新华都12月30日快速上涨

视点!新华都12月30日快速上涨

以下是新华都在北京时间12月30日11:04分盘口异动快照:12月30日,新华都盘中快速上涨,5分钟内涨幅超过2...
12-30 11:06:16
时隔一年半再发进口游戏版号意味着什么?

时隔一年半再发进口游戏版号意味着什么?

7月18日,商务部、中央宣传部等27部门联合印发《关于推进对外文化贸易高质量发展的意见》,明确提出“扩...
12-30 07:42:08
听见你,温暖你丨“救火骑士”龙麻子:身为中国人,要有中国人的血性

听见你,温暖你丨“救火骑士”龙麻子:身为中国人,要有中国人的血性

2022年开启结束倒计时这一年总有一些平凡的坚守让我们感动总有一些声音让我们难以忘怀在充满变化与挑战...
12-29 20:41:34
深振业A(000006.SZ)中标深圳宝安区西乡海乐花园棚户区改造项目

深振业A(000006.SZ)中标深圳宝安区西乡海乐花园棚户区改造项目

智通财经APP讯,深振业A公告,公司收到深圳市宝安区住房和建设局签发的《深圳市宝安区住房和建设局关于...
12-29 18:24:08
使用PyTorch 2.0 加速Hugging Face和TIMM库的模型

使用PyTorch 2.0 加速Hugging Face和TIMM库的模型

点蓝色字关注“机器学习算法工程师”设为星标,干货直达!​PyTorch2 0引入了**torch compile()**来加...
12-29 16:34:50
全球新资讯:鼎信通讯:公司在南网2022年计量产品第二批框架招标中,预中标1.78亿元,目前尚处于公示阶段

全球新资讯:鼎信通讯:公司在南网2022年计量产品第二批框架招标中,预中标1.78亿元,目前尚处于公示阶段

鼎信通讯(603421)12月29日在投资者关系平台上答复了投资者关心的问题。投资者:董秘你好,1、请问公司在...
12-29 14:19:45
提前预约、错峰办理!郑州各政务服务中心恢复开放

提前预约、错峰办理!郑州各政务服务中心恢复开放

近日,有市民反映部分政务服务中心没有正常开展业务,也没有暂时关闭的通知。恰逢年底,医保确认、年度...
12-29 12:25:02
超越ConvNeXt!Transformer 风格的卷积网络视觉基线模型Conv2Former

超越ConvNeXt!Transformer 风格的卷积网络视觉基线模型Conv2Former

↑点击蓝字关注极市平台作者丨科技猛兽编辑丨极市平台极市导读本文提出一种卷积调制模块,利用卷积来建...
12-29 10:26:10
南威软件:吴志雄累计被质押股份总数约为1.57亿股_世界即时看

南威软件:吴志雄累计被质押股份总数约为1.57亿股_世界即时看

南威软件(SH603636,收盘价:13 31元)12月28日晚间发布公告称,截至本公告日,吴志雄先生持有公司无限...
12-28 18:31:51
福成股份12月28日快速反弹_当前时讯

福成股份12月28日快速反弹_当前时讯

以下是福成股份在北京时间12月28日09:35分盘口异动快照:12月28日,福成股份盘中快速反弹,5分钟内涨幅...
12-28 15:26:39
同质化严重 国际快时尚品牌面临退出危机 借势起飞 国货快时尚品牌迎来发展机遇期|环球今头条

同质化严重 国际快时尚品牌面临退出危机 借势起飞 国货快时尚品牌迎来发展机遇期|环球今头条

过去,欧美快时尚巨头是行业的引领者;如今,中国本土快时尚品牌迎来机遇期强势崛起,从过去的跟随者和...
12-28 11:41:01
中视传媒(600088)12月27日主力资金净卖出78.41万元

中视传媒(600088)12月27日主力资金净卖出78.41万元

截至2022年12月27日收盘,中视传媒(600088)(600088)报收于9 65元,下跌1 13%,换手率1 14%,成交量4 54万手,成交额4378
12-28 08:31:10
丽尚国潮: 丽尚国潮关于注销回购股份实施暨股本变动公告

丽尚国潮: 丽尚国潮关于注销回购股份实施暨股本变动公告

丽尚国潮:丽尚国潮关于注销回购股份实施暨股本变动公告
12-27 20:51:06
湖南省人民医院核酸检测仅对到医院就诊的患者开放

湖南省人民医院核酸检测仅对到医院就诊的患者开放

湖南省人民医院天心阁院区、马王堆院区核酸检测仅对到医院就诊的患者开放。医院医疗资源紧张,核酸检测...
12-27 16:38:40
中评关注:王育敏行程排场大 接棒卢秀燕? 快讯

中评关注:王育敏行程排场大 接棒卢秀燕? 快讯

中国国民党前文传会主委王育敏竞选嘉义县长失利,应党籍台中市长卢秀燕之邀担任副市长,被拿来与前台北...
12-27 12:09:02
消杀市场“混战” 加大产能、跨界生产的故事不断复刻

消杀市场“混战” 加大产能、跨界生产的故事不断复刻

提及酒精消毒和次氯酸消毒的区别,上述次氯酸生产企业相关人员解释称:“次氯酸的消毒能力‘秒杀’酒精...
12-27 07:35:21
新成昆铁路全线贯通运营 成都到昆明约7小时

新成昆铁路全线贯通运营 成都到昆明约7小时

12月26日上午8:05,C57次列车驶离成都南站,预计11:00即可抵达西昌西。这也是新成昆铁路全线(即成昆铁...
12-26 18:23:56
环球热讯:佳电股份:        截至2022年12月20日,公司股东总数26932

环球热讯:佳电股份: 截至2022年12月20日,公司股东总数26932

佳电股份(000922)12月26日在投资者关系平台上答复了投资者关心的问题。投资者:你好,请问到12月20日的...
12-26 13:32:53
拟投资25亿元跨界光伏领域 三五互联坦言存在各种风险

拟投资25亿元跨界光伏领域 三五互联坦言存在各种风险

中国网是国务院新闻办公室领导,中国外文出版发行事业局管理的国家重点新闻网站。本网通过10个语种11个...
12-26 07:57:04

为您推荐

精彩推送