[Java]订单超时自动取消——RocketMQ实现+SpringBoot项目

4 篇文章 3 订阅


一、背景

避免用户未付款订单占用库存资源


二、环境准备

  1. 下载安装RocketMQ
  2. SpringBoot整合RocketMQ——rocketmq-spring-boot-starter

三、项目使用

1、业务需求:

订单超时30分钟,取消订单。

2、实现原理

利用RocketMQ的延迟消息实现。

 rocketMQTemplate.syncSend(主题, 消息, 超时时间, 延迟等级);

RocketMQ默认提供了18个延迟等级,延迟30分钟是等级16。

延迟等级0123456789101112131415161718
延迟时间01s5s10s30s1m2m3m4m5m6m7m8m9m10m20m30m1h2h

3、代码实现

3.1、生产端——消息发送
@Service
public class Server {

    private RocketMQTemplate rocketMQTemplate;
    
	public Server(RocketMQTemplate rocketMQTemplate) {
        this.rocketMQTemplate = rocketMQTemplate;
    }

   /**
   *发送延迟订单消息
   **/
    public void sendDelayOrderMsg(String msg) {
    	Message<String> msgBody = MessageBuilder.withPayload(msg).build();
        rocketMQTemplate.syncSend("delay_order", msgBody , 2000, 16);
    }
}

3.2、消费端——延迟消息监听
@Component
@RocketMQMessageListener(topic = "delay_order",consumerGroup = "order-consumer", selectorExpression = "*")
public class OrderListner implements RocketMQListener<String> {

    @Override
    public void onMessage(String msg) {
        System.out.println("接收到的延迟消息:"+msg);
        //todo 自定义义务处理。
        //逻辑删除该订单数据
    }
}

四、保证消息消费成功

rocketmq-spring-boot-starter在监听消息就实现了自动提交ack
RocketMQListener的onMessage方法不抛异常都会自动提交ack。
抛出异常则进行重试。

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码鹿的笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值