请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

spring cloud stream 集成rocketmq,如何发送延时消息

在根据课程完成了rocketmq的学习后,实际业务中有需要发送延时消息的需求,
如果用单独的rocketmq我参考了一些网上的说法
https://blog.csdn.net/zhangcongyi420/article/details/90544486
设置延时的等级然后加上如下的代码

message.setDelayTimeLevel(3);

我测试了也是可以的。

之后集成了 spring cloud stream 我了解下
https://github.com/alibaba/spring-cloud-alibaba/wiki/RocketMQ-en 这里的说明
图片描述

我跟着设置了下貌似也没有效果,不太清楚这里的 DELAY 是不是延时等级的意思,请老师解答,谢谢!

正在回答

1回答

建议将代码中的“DELAY” 改成  MessageConst.PROPERTY_DELAY_TIME_LEVEL  这样表达的意思就比较清晰啦。

-------

要想发送延时消息,需要两步,首先:

Message message = MessageBuilder.withPayload(msg)
            .setHeader(MessageConst.PROPERTY_DELAY_TIME_LEVEL, 1)
            .build();
            ....

第二:

spring.cloud.stream.rocketmq.bindings.output.producer.sync=true

需要注意,DELAY设置的是延时等级,而不是延时的时间。目前rockatmq支持的延迟时间有:

1s 5s 10s 30s 1m 2m 3m 4m 5m 6m 7m 8m 9m 10m 20m 30m 1h 2h

以上支持的延迟时间对应的级别依次是1,2,3.....

TIPS

如果你对这块原理感兴趣,可以阅读下这篇文章:http://silence.work/2018/12/16/RocketMQ-延迟消息的使用与原理分析/



关于延时时间

目前,开源RocketMQ并不支持设置开始消费的时间,例如:

.setHeader("__STARTDELIVERTIME", ""2019-09-05 00:00:00"")

或者:

.setHeader(MessageConst.PROPERTY_CONSUME_START_TIMESTAMP, 时间戳)


相关Issue

建议阅读相关Issue深入了解一下:

https://github.com/alibaba/spring-cloud-alibaba/issues/680

https://github.com/alibaba/spring-cloud-alibaba/issues/791


0 回复 有任何疑惑可以回复我~
  • 提问者 艾尔布鲁 #1
    不知道说什么,老师太6了!
    回复 有任何疑惑可以回复我~ 2019-09-05 15:16:28
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信