RabbitMq基础入门,使用IDEA+Springboot+RabbitMq实现延时队列--取消超时订单

本文介绍了如何利用RabbitMQ的TTL和Dead Letter Exchange特性实现延时队列,以取消超时订单为例,详细讲解了从搭建项目环境到创建生产者、消费者的过程,包括配置队列、交换机和绑定,以及使用@RabbitListener注解监听消息。
摘要由CSDN通过智能技术生成

测试前言

RabbitMQ 作为目前应用相当广泛的消息中间件,在企业级应用、微服务应用中充当着重要的角色。特别是在一些典型的应用场景以及业务模块中具有重要的作用,比如业务服务模块解耦、异步通信、高并发限流、超时业务、数据延迟处理等。
这篇文章带领大家使用RabbitMQ实现延时队列

1.搭建项目环境

工欲善其事,必先利其器,接触一个新技术之前,肯定要先安装环境和工具,本篇文章不提供安装教程,下方提供了一个安装RabbitMQ的博客:
RabbitMQ安装教程
安装成功之后RabbitMQ的运行界面就是这样的
在这里插入图片描述
这样我们的项目环境就搭建成功了。

2.延时队列–实现思路

延迟队列,也叫“延时队列”,顾名思义,其实就是“生产者生产消息,消息进入队列之后,并不会立即被指定的消费者所消费,而是会延时一段指定的时间TTL(Time To Live),最终才被消费者消费

RabbitMQ本身是不支持延时队列,而是同过二个特性来实现的:

  1. Time To Live(TTL)
    RabbitMQ可以针对Queue设置x-expires 或者 针对Message设置 x-message-ttl,来控制消息的生存时间,如果超时(两者同时设置以最先到期的时间为准),则消息变为dead letter(死信)
    RabbitMQ针对队列中的消息过期时间有两种方法可以设置。
    A: 通过队列属性设置,队列中所有消息都有相同的过期时间。
    B: 对消息进行单独设置,每条消息TTL可以不同。
    如果同时使用,则消息的过期时间以两者之间TTL较小的那个数值为准。消息在队列的生存时间一旦超过设置的TTL值,就成为dead letter(死信)

  2. Dead Letter Exchanges(DLX)
    RabbitMQQueue可以配置x-dead-letter-exchangex-dead-letter-routing-key(可选)两个参数,如果队列内出现了dead letter(死信),则按照这两个参数重新路由转发到指定的队列。
    x-dead-letter-exchange:出现dead letter之后将dead letter重新发送到指定exchange
    x-dead-letter-routing-key:出现dead letter之后将dead letter重新按照指定的routing-key发送路由

可能说这么多还是看不太懂,我准备了一张图
在这里插入图片描述
延时队列的执行流程就是图中所示

2.1 延时队列–应用场景

介绍完延时队列的概念之后,给大家举一个在项目中常见的场景:

用户创建下单记录之后,会对其进行付款,付款成功之后,该条记录将变为已支付并且有效,否则的话,一旦过了指定的时间,即超时了,则该记录将置为无效,并且不能被用于后续的业务逻辑

可能有人用过定时器(Timer)也可以实现类似的功能,但是定时器不能精准的知道哪些需要执行任务,查询范围太大,太浪费性能。
使用
rabbitmap
,我们只用把需要把的某个订单放入消息中间去(message),并且设置该消息的过期时间,等过期时间到达时再取出消费即可。
下面我们就用延时队列来实现,某个时间段过后取消未付款的订单

3.使用springboot+RabbitMq进行测试

  1. 使用Idea搭建springboot项目
    在这里插入图片描述2.在pom.xml中引入项目需要的jar包
  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-amqp</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

3.配置文件application.properties

#本机ip地址,一般装在本机直接使用localhost,若是虚拟机,则使用虚拟机的ip地址
spring.rabbitmq.host=localhost 
# 端口号
spring.rabbitmq.port=5672
# rabbitmq的用户信息,默认都为guest
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

4.在与springboot启动类同级新建config和pojo和controller包
在这里插入图片描述
首先新

  • 14
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值