tongchenkeji 发表于:2023-3-6 16:46:400次点击 已关注取消关注 关注 私信 5.0的定时消息,是不是就能实现任意精度的延迟消息啊?[阿里云消息队列MQ] 暂停朗读为您朗读 5.0的定时消息,是不是就能实现任意精度的延迟消息啊? 「点点赞赏,手留余香」 赞赏 还没有人赞赏,快来当第一个赞赏的人吧! 海报 消息队列 MQ# 5.0的定时消息,是不是就能实现任意精度的延迟消息啊?1
HaydenGuoAM 2023-11-28 0:12:11 2 RocketMQ 5.0之前的版本不支持准确的延迟消息,只能通过实现定时消息的方式进行近似的延迟,然而这种延迟方式无法进行任意精度的控制,准确度受到多种因素的影响,通常可能有几十秒的误差。 在RocketMQ 5.0及以上版本中,RocketMQ支持准确的延迟消息。可以通过发送一个普通的消息,并设置这个消息的“延迟级别”(delay level),来指定这个消息需要被延迟的时间,最大支持的延迟时间可达29天,精度可达毫秒级别,精度和延迟时间是可配的。 比如可以以RocketMQ Java SDK为例,创建一个消息对象,然后在消息属性中添加一个延迟级别,例如: Message message = new Message( "TopicTest", // topic "DelayTag", // tag "Hello RocketMQ delay message".getBytes() // message body);// 设置 messageDelayTimeLevel 属性,此处表示10s的延迟message.putUserProperty(MessageConst.PROPERTY_DELAY_TIME_LEVEL, "3"); 延迟级别的值由具体业务需求进行配置和定义,它们通常以2的幂次方递增,比如: 延迟级别 延迟时间(秒) 0 0 1 1 2 5 3 10 4 30 … … 因此,通过在消息中设置延迟级别,RocketMQ 5.0版本及以上的版本可以实现更为精度和准确的延迟消息。
凌云CloudAM 2023-11-28 0:12:11 3 RocketMQ 5.X 定时消息引入了秒级的时间轮算法。注意,是秒级时间轮。 从源码来看,RocketMQ 5.X 定义了一个 7 天的以秒为单位的时间轮,注意刻度为1s,没有再细,比如 10ms、100ms之类的 。
定时消息的精度会有 1s ~ 2s 的延迟误差。
RocketMQ 5.0之前的版本不支持准确的延迟消息,只能通过实现定时消息的方式进行近似的延迟,然而这种延迟方式无法进行任意精度的控制,准确度受到多种因素的影响,通常可能有几十秒的误差。
在RocketMQ 5.0及以上版本中,RocketMQ支持准确的延迟消息。可以通过发送一个普通的消息,并设置这个消息的“延迟级别”(delay level),来指定这个消息需要被延迟的时间,最大支持的延迟时间可达29天,精度可达毫秒级别,精度和延迟时间是可配的。
比如可以以RocketMQ Java SDK为例,创建一个消息对象,然后在消息属性中添加一个延迟级别,例如:
RocketMQ 5.X 定时消息引入了秒级的时间轮算法。注意,是秒级时间轮。
从源码来看,RocketMQ 5.X 定义了一个 7 天的以秒为单位的时间轮,注意刻度为1s,没有再细,比如 10ms、100ms之类的 。
3天内任意精度。此答案整理自钉群“群2-Apache RocketMQ 中国”