Rocketmq延迟消息队列
应用场景:
比如电商里,提交了一个订单就可以发送一个延时消息,1h后去检查这个订单的状态,如果还是未付款就取消订单释放库存。
不逼逼 直接上代码
生产者发送消息代码
package com.lazycece.sbac.rocketmq.offset;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.spring.core.RocketMQTemplate;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
* 延迟消息队列
* @author hjt
* @date 2021/8/06
*/
@Component
@Slf4j
public class OffsetProducer {
@Resource
private RocketMQTemplate rocketMQTemplate;
public void send() {
String message = "offset message: ";
for (int i = 0; i < 100; i++) {
rocketMQTemplate.syncSendOrderly("topic-offset", message + i, "offset_orderly_key");
}
}
}
消费者消费消息代码(定义为顺序消费,默认是无序消费)
package com.lazycece.sbac.rocketmq.offset;
import lombok.extern.slf4j.Slf4j;
import org.apache.rocketmq.client.consumer.DefaultMQPushConsumer;
import org.apache.rocketmq.common.UtilAll;
import org.apache.rocketmq.common.consumer.ConsumeFromWhere;
import org.apache.rocketmq.spring.annotation.ConsumeMode;
import org.apache.rocketmq.spring.annotation.RocketMQMessageListener;
import org.apache.rocketmq.spring.core.RocketMQListener;
import org.apache.rocketmq.spring.core.RocketMQPushConsumerLifecycleListener;
import org.springframework.stereotype.Component;
/**
* @author hjt
* @date 2021/8/06
*/
@Slf4j
@Component
@RocketMQMessageListener(topic = "topic-offset",
consumerGroup = "offset-consumer-group",consumeMode = ConsumeMode.ORDERLY)
public class OffsetConsumer implements RocketMQListener<String>,RocketMQPushConsumerLifecycleListener{
@Override
public void onMessage(String message) {
System.out.println("延迟队列消息:"+message);
log.info("======={}=======", message);
}
@Override
public void prepareStart(DefaultMQPushConsumer consumer) {
// consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_FIRST_OFFSET);
consumer.setConsumeFromWhere(ConsumeFromWhere.CONSUME_FROM_TIMESTAMP);
consumer.setConsumeTimestamp(UtilAll.timeMillisToHumanString3(System.currentTimeMillis()-100000));
}
}
注意:
指的是延迟消费的时间,可以自定义
结果
代码可以私信找我要哦,一起努力,一起加油。