延迟消息
一般用于:提前发送消息,延迟一段时间后才需要被处理的场景。比如:下单半小时后还未支付,则取消订单 释放库存 等。
RocketMQ的延迟消息使用上非常便捷,但是不支持任意时间的延迟,这一点对于有强迫症的朋友来说就比较难受,但是搞明白为什么这么设计后,就自然释怀了。
为什么RocketMQ不支持任意时间的延时?为什么延迟时间只能是从1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
这些时间段里选?如果让你来设计RocketMQ的延迟消息,你会怎么设计?本文从以上几个问题聊聊RocketMQ的延迟消息。
1、使用延迟消息
- RocketMQ不支持任意时间的延迟,只有18个等级的延迟时间,默认是:
1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
。从头到尾共18个等级时间,s、m、h、d,分别表示秒、分、时、天。 - 默认的18个等级对应的时间可以修改,在
broker.conf
中增加如下配置,根据自身需求修改时间,然后重启broker。
messageDelayLevel=1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h
- RocketMQ发送延迟消息只需要给消息设置延迟时间级别
setDelayTimeLevel
。
DefaultMQProducer producer = new DefaultMQProducer("