mq任意延时消息实现原理概述

zby9527 zby9527     2022-12-08     531

关键词:

前置知识

  • 以RocketMQ为例

  • 使用IDR启动RocketMQ,参考Eclpse启动RocketMq

  • 大多数消息中间件都支持固定延时队列,比如RocketMQ支持的默认延时等级messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h。参考RocketMQ延时配置

  • Netty和Kafka中用到了时间轮的算法,自行百度

实现思路

  • 配置MQ的延时等级为1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192,16384, 32768, 65536, 131072,单位s
  • 对应1~18延时等级
  • 当发送一个任意延时的消息时,把消息丢到固定等级的延时队列去,保留剩余延时时间到消息属性中;消费时检查剩余延时时间,如果大于0,继续丢回延时队列,重复上诉步骤直至剩余延时为0,此时真正的消费这条消息
  • 举例,需要发送27s延时的消息,16<27<64,于是先丢到固定延时16s的队列中,然后设置剩余延时为11s,16s后这个消息被消费,检查剩余延时,此时8<11<16,再丢到8s延时队列中,重复上诉步骤直至剩余延时为0,把消息交给真正的消费中

技术图片



mq任意延时消息基于客户端实现(代码片段)

目录启动RocketMQ公共代码常量类延时等级转换工具类生产者生产者简单封装生产者示例消费者封装消费者监听器消费者示例启动测试优点缺点启动RocketMQ启动nameserver修改broker配置参数,新增messageDelayLevel=1s2s4s8s16s32s64s128s256s512s1024s... 查看详情

消息队列mq的原理及实现方法

消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收... 查看详情

如何在mq中实现支持任意延迟的消息?

什么是定时消息和延迟消息?定时消息:Producer将消息发送到MQ服务端,但并不期望这条消息立马投递,而是推迟到在当前时间点之后的某一个时间投递到Consumer进行消费,该消息即定时消息。延迟消息:Producer将消息发送到MQ服... 查看详情

springbootrabbitmq集成,延时消息队列实现

...分为两部分,第一部分为创建普通消息队列,第二部分为延时消息队列实现: springboot提供对mq消息队列支持amqp相关包,引入即可: [html] viewplain copy <!-- rabbit mq -->    查看详情

一口气说出6种实现延时消息的方案,还有谁不会?!(代码片段)

原文:juejin.cn/post/6844904150703013901延时消息(定时消息)指的在分布式异步消息场景下,生产端发送一条消息,希望在指定延时或者指定时间点被消费端消费到,而不是立刻被消费。延时消息适用的业务场... 查看详情

rocketmq延时消息实现原理探究(代码片段)

由于日常开发中遇到几次使用延时消息的场景,而且目前业务中使用到的消息中间件有rabbitmq和kafka,对延时消息的支持都不太理想。其中rabbitmq延时消息是通过设置队列ttl+死信exchange实现缺点嘛:每次都得设置两... 查看详情

mq关于实现最终一致性分布式事务原理解析(代码片段)

...通过MQ实现分布式事务最终一致性原理 概念介绍事务消息:消息队列MQ提供类似X/OpenXA的分布式事务功能,通过消息队列MQ事务消息能达到分布式事务的最终一致。半事务消息:暂不能投递的消息,发送方已经成功地将消息发... 查看详情

消息队列mq技术的介绍和原理

消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上,队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收... 查看详情

利用rabbitmq的死信队列实现延时消息(代码片段)

mq基本的消息模型mq死信队列的消息模型简单的说就是先弄一个正常队列,然后不要设置消费者,接着给这个正常队列绑定一个死信队列,这个死信队列设置方式和正常队列没啥区别。然后监听这个死信队列的消费.一... 查看详情

rocketmq源码分析4-事务消息实现原理

为什么消息要具备事务能力参见还是比较清晰的。简单的说就是在你业务逻辑过程中,需要发送一条消息给订阅消息的人,但是期望是此逻辑过程完全成功完成之后才能使订阅者收到消息。业务逻辑过程假设是这样的:逻辑部分... 查看详情

如果有人再问你怎么实现分布式延时消息,这篇文章丢给他(代码片段)

...别鸡肋,但是在阿里云中的RocketMQ却提供了支持40天之内任意秒级延时队列,果然有些功能你只能充钱才能拥有。当然你或许想换一个开源的消息队列,在开源社区中消息队列延时消息很多都没有被支持比如:RabbitM 查看详情

消息中间件学习笔记——rabbitmq

文章目录一、消息中间件概述二、消息中间件(MQ)的优劣(1).MQ的优势(2).MQ的劣势系统可用性降低系统复杂度提高一致性问题三、常见的MQ产品四、RabbitMQ中的概念五、如何实现RabbitMQ的延迟对列一、消息中间件概述 通过... 查看详情

消息队列(mq)与kafaka概述(filebeat+kafka+elk部署)(代码片段)

消息队列(MQ)与kafaka概述(Filebeat+Kafka+ELK)部署一、消息队列(MQ)概述1、为什么需要消息队列(MQ)?2、使用消息队列的好处3、消息队列的两种模式二、Kafka定义1、Kafka简介2、Kafka的特性3、kafaka系统架构... 查看详情

rabbitmq实现延时消息的两种方式

...时交换机实现延时消息更加灵活,可以针对每个消息设置任意的过期时间,交换机中的消息如果过期将路由到绑定的队列中进行消费;定义两个队列并声明为延时exchnage,delayed-exchange需rabbitmq延时插件支持,在发送消息时带上x-de... 查看详情

kafka概述

Kafka概述消息列队(MQ)为什么需要消息队列(MQ)使用消息队列的好处消息队列的两种模式kafka简介Kafka定义Kafka简介Kafka的特性kafka系统架构消息列队(MQ)为什么需要消息队列(MQ)主要原因是由于在高并发... 查看详情

高可用延迟队列设计与实现

延迟队列:一种带有延迟功能的消息队列延时→未来一个不确定的时间mq→消费行为具有顺序性这样解释,整个设计就清楚了。你的目的是延时,承载容器是mq。背景列举一下我日常业务中可能存在的场景:建立延时日程,需要... 查看详情

高效延时消息设计与实现的场景

...ashedwheeltimer原理,自己可以仿造一种数据结构,用来实现延时消息触发。首先分析项目中哪些运用 查看详情

rabbitmq延时队列的实现原理和应用实例(代码片段)

一、延时队列应用场景二、RabbitMQ实现原理1、RabbitMQ中的TTLTTL是RabbitMQ中一个消息或者队列的属性,表明一条消息或者该队列中的所有消息的最大存活时间,单位是毫秒。目前有两种方法可以设置消息的TTL:第一种方... 查看详情