生产者在确定一定时间间隔之后,这个消息才会被发送。其实也就是不会马上将消息发送出去,希望过一段时间以后再发送出去。
生产者在发送message的时候设置了一个延迟时间的等级,这里的3描述的是时间延迟的等级。这个消息会被延迟10s的时间
message . setDelayTimeLevel ( 3 );
// This message will be delivered to consumer 10 seconds later
在集群的某个选项里面,找到某一个broker,点击配置你会发现消息的延迟等级在这个地方定义为了18个等级。这18个等级分别有不同的延迟时间。1级是1s,2级是10s,三级是30s。
选择哪个等级就会在指定的时间之后发送,所以是一个delay message的效果。
它是如何实现延迟的效果?
在系统里面会给每个等级配置topic,那么这18个topic会有不同的效果,延迟10s钟就会发送到延迟10s的topic里面,那么这个消息就会被延迟10s的消费。这个延迟消费是发生在消费者端的。对于生产者来说并不是延迟发送。
它是发送到这个topic里面,这个topic的效果是消费者会延迟10s去消费这个topic里面的消息。 这些都是rocketmq帮我们已经实现的功能。
在主题这里将系统的先选上
系统为我们提供这样一个topic,SCHEDULE_TOPIC_XXXX,以SCHEDULE_TOPIC为前缀,可以看到这里面会有18个topic。
在不同的broker上面会看到有些queueId是一样的,但是总数是18,因为0-17。这18个topic来实现延迟队列的效果。
生产者将消息发送过去,但是延迟的时间是10s,消费者得10s之后才能消费,才能收到消息。