延迟队列存储的对象是对应的延迟消息,所谓的延迟消息是指当消息被发送以后,并不想让消费者立刻拿到消息,而是等待特定时间后,消费者才能拿到这个消息进行消费
利用RabbitMq
的TTL
和死信队列 来实现延时消费。
(相关资料图)
如果设置的是队列统一过期时间放到死信队列,没有什么问题。
如果是延时时间设置到每条消息上的。而不是给队列的。
实现方式为消息存活时间为动态用户页面可配置的。
先用一条消息的存活时间是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
--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
--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界面新建交换机选择类型出现红框标注即表示成功
@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(); }}
引入依赖: 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; }}
上一篇:新动态:小时代分几部
下一篇:最后一页
原因是尽管ttl是设给每条消息的。但是本质上,所有延时消息都还在一个队列里,对它过期时间的检测也是从...
1、《小时代》是作家郭敬明创作的系列长篇小说,共包含《小时代1 0折纸时代》《小时代2 0虚铜时代》和...
校长打call|高考倒计时百天!南京大学校长吕建发出最强邀约,期待你们成为“南大人”
人民银行:稳固对实体经济的可持续支持力度充实中央银行的准备金和资本实施审慎的资产损失拨备制度人民...
1、《为什么是我变成了吸血鬼》是晋江文学城连载的现代小说。2、作者是姬蛋皇。3、已完结。文章到此就分...
1、事实婚姻的男女应无配偶,有配偶则成为事实重婚。2、事实婚姻的当事人具有婚姻的目的和共同生活的形...
1、对于1 5、2 5、4、6、10mm2的导线可将其截面积数乘以5倍。2、对于16、25mm2的导线可将其截面积数乘以
1、乔纳森·迪肯逊州立公园位于美国佛罗里达州的马丁县,成立于1950年,占地面积11500英亩。2、名字源于1696
煤炭市场分析20230224,煤矿,港口,贸易商,煤炭市场
数据宝统计显示,沪深两市全天特大单净流出150 8亿元。其中,15股特大单净流入超1亿元,中科曙光特大单...
1、2012年8月25日上午9点左右,江苏昆山市人民路、前进路路口发生一起交通事故。2、一辆小型轿车与2名行...
1、首先,深入岩层获取火成岩。2、然后,污水被蒸馏并在冷冻室中冷却。3、岩浆可以通过保温管抽出,不需...
三星发布了Q系列的最新产品Q995GC条形音箱。有关新小工具的详细信息已在该公司的德国网站上公布。这是该...
Haynes:拉塞尔X光结果呈阴性不需要进行核磁共振检测,名记,x光,核磁共振检测,威廉·费尔顿·比尔·拉塞尔
近日,罗免镇召开一季度经济运行第二次分析会,按照省、市、县各级有关决策部署,对全镇经济运行情况和...
2月24日新股提示:茂莱光学等申购四川黄金等公布中签号绿通科技公布中签率,新股,茂莱光学,四川黄金,绿通科技
当地时间2月23日,塔斯社报道称,美国副国务卿纽兰在接受专访时表示,如果俄方做好准备,美方也已准备好...
1、扶辅,汉语词语,拼音是fúfǔ,意思是扶助。2、。本文到此分享完毕,希望对大家有所帮助。
中国日报网2月22日电据美国有线电视新闻网(CNN)21日报道,美国医学院校协会(AssociationofAmericanMedicalColleg
2023年2月23日双星新材(002585)发布公告称公司于2023年2月20日接受机构调研,瑞士信贷吴东颖、光大证券...
感谢小黑盒提供的CDkey前言:作为一名非系列粉丝,我对系列作品的黑道大佬们,穿越到日本古代扮演历史人...
1、烫伤:一般在喝热水或吃热气腾腾的食物时,会烫伤舌头,产生气泡,一般会有明显的痛感,尤其是吃烫的...
蜀国的政治体制与魏国吴国不同,有着鲜明的特点。我认为最大的不同就是蜀国实行的是粗步的文官政府体制...
近期,卫星导航领域利好消息不断。
如下解答:相信很多人都有看过徐峥主演的电视剧《大男当婚》,里面的情节相当逗人,笑中带泪。男主角曹小...
X 关闭
X 关闭