建议将代码中的“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