1. 生产延迟消息
生产延迟消息时,需要设置消息的延迟级别。RocketMQ默认提供18个延迟级别,每个级别对应不同的延迟时间:
延迟级别 | 延迟时间 |
---|---|
1 | 1s |
2 | 5s |
3 | 10s |
4 | 30s |
5 | 1m |
6 | 2m |
7 | 3m |
8 | 4m |
9 | 5m |
10 | 6m |
11 | 7m |
12 | 8m |
13 | 9m |
14 | 10m |
15 | 20m |
16 | 30m |
17 | 1h |
18 | 2h |
生产者代码
import org.apache.rocketmq.client.producer.SendResult;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class RocketMQDelayProducer {
@Autowired
private RocketMQTemplate rocketMQTemplate;
public void sendDelayMessage(String topic, String message, int delayLevel) {
rocketMQTemplate.syncSend(topic, MessageBuilder.withPayload(message).build(), 3000, delayLevel);
}
}
在这个例子中,delayLevel
参数指定了消息的延迟级别。
2. 消费延迟消息
消费延迟消息与普通消息没有区别。消费者代码如下:
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.springframework.stereotype.Service;
@Service
@RocketMQMessageListener(topic = "your-topic", consumerGroup = "your-consumer-group")
public class DelayConsumer implements RocketMQListener<String> {
@Override
public void onMessage(String message) {
System.out.println("Delay Consumer received: " + message);
// Process the message
}
}
注意事项
- 延迟级别:RocketMQ只支持预定义的延迟级别,无法自定义任意延迟时间。
- 消息重试:延迟消息在重试机制中也会遵循延迟级别进行重试。