概述:

在rabbitmq中我们可以给消息设定过期时间LLT(Time to Live),在消息发送后过期时间段内未被消费,则系统会将其删除,被删除的消息将会进入死信队列。关于设置消息的过期时间有两种设置方式。1,可以设置在消息队列上,则经过该消息队列的消息都会使用该消息对列的过期时间;2,也可以将过期时间设置在消息体上,对消息进行单独的消息过期时间设置。如果在经过一个设置了过期时间的队列的并且自身也设置了过期时间的消息,则其过期时间取决于两者时间较小的一个。

接下来我们本章将在上一章《RabbitMq(八) SpringBoot整合RabbitMQ 生产者代码实现》的基础上进行调整,对消息进行设置不同场景的过期时间。大致实现步骤如下:

  1. 创建rabbitmq的spring 配置资源文件
  2. 在配置文件中声明消息队列信息,包含队列名称,过期时间等
  3. 将配置资源文件在启动类上进行导入
  4. 在发送消息时,指定2步骤中声明的队列名称

一、配置文件信息

在SpringBoot工程的资源目录下创建spring目录,并创建rabbitmq.xml配置文件,引入rabbit命名空间。xml文件代码如下:

  1.  
    <?xml version="1.0" encoding="UTF-8"?>
  2.  
    <beans xmlns="http://www.springframework.org/schema/beans"
  3.  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4.  
    xmlns:rabbit="http://www.springframework.org/schema/rabbit"
  5.  
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  6.  
    http://www.springframework.org/schema/rabbit http://www.springframework.org/schema/rabbit/spring-rabbit.xsd">
  7.  
     
  8.  
    <!-- 定义过期队列及其属性,不存在则自动创建-->
  9.  
    <rabbit:queue id="my_ttl_queue" name="my_ttl_queue" auto-declare="true" >
  10.  
    <rabbit:queue-arguments>
  11.  
    <!-- 投递该消息的队列 ,中消息如果在6秒之内没有被消费则进行删除 -->
  12.  
    <entry key="x-message-ttl" value-type="long" value="6000" />
  13.  
    </rabbit:queue-arguments>
  14.  
    </rabbit:queue>
  15.  
     
  16.  
    </beans>

二、在springBoot工程的启动类上导入一种的配置资源文件:

通过在启动类上使用@ImportResource 注解导入配置信息,代码如下:

  1.  
    package com.xiaohui.rabbitmq;
  2.  
     
  3.  
    import org.springframework.boot.SpringApplication;
  4.  
    import org.springframework.boot.autoconfigure.SpringBootApplication;
  5.  
    import org.springframework.context.annotation.ImportResource;
  6.  
     
  7.  
     
  8.  
    /**
  9.  
    * 生产者启动类
  10.  
    */
  11.  
    @SpringBootApplication
  12.  
    @ImportResource("classpath:spring/rabbitmq.xml")
  13.  
    public class ProducerApplication {
  14.  
     
  15.  
    public static void main(String[] args) {
  16.  
    SpringApplication.run(ProducerApplication.class,args);
  17.  
    }
  18.  
    }

三、编写调用请求方法测试消息队列过期时间

我们在之前篇章的web层Controller中添加一个方法sendTTLMsg。并在内部固定消息队列为我们资源文件中配置的消息队列“my_ttl_queue”。Controller代码如下:

  1.  
    package com.xiaohui.rabbitmq.controller;
  2.  
     
  3.  
    import com.xiaohui.rabbitmq.config.RabbitMqConfig;
  4.  
    import org.springframework.amqp.core.Message;
  5.  
    import org.springframework.amqp.core.MessageProperties;
  6.  
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
  7.  
    import org.springframework.beans.factory.annotation.Autowired;
  8.  
    import org.springframework.web.bind.annotation.GetMapping;
  9.  
    import org.springframework.web.bind.annotation.RequestParam;
  10.  
    import org.springframework.web.bind.annotation.RestController;
  11.  
     
  12.  
    @RestController
  13.  
    public class MsgController {
  14.  
     
  15.  
     
  16.  
    @Autowired
  17.  
    RabbitTemplate rabbitTemplate;
  18.  
     
  19.  
    @GetMapping("/sendTTLMsg")
  20.  
    public String sendTTLMsg(@RequestParam String msg){
  21.  
    MessageProperties properties = new MessageProperties();
  22.  
    properties.setExpiration("3000");
  23.  
    Message msgobj = new Message(msg.getBytes(),properties);
  24.  
    rabbitTemplate.convertAndSend("my_ttl_queue",msgobj);
  25.  
    return "消息发送成功!";
  26.  
    }
  27.  
    }

我们访问url进行条用Controller进行调用发送消息代码,并可以通过rabbitmq控制台查看队列信息情况。

消息发送之后rabbit的控制台我们可以看到会新增一个消息队列,并且我们可以看到队列中消息从0变成1后,在过期时间之后又从1变为0。

四、编写调用请求方法测试消息过期时间

我们在web层的Controller中编写请求方法并通过代码实现单条消息的创建以及通过配置设置消息过期时间。controller代码如下:

  1.  
    package com.xiaohui.rabbitmq.controller;
  2.  
     
  3.  
    import com.xiaohui.rabbitmq.config.RabbitMqConfig;
  4.  
    import org.springframework.amqp.core.Message;
  5.  
    import org.springframework.amqp.core.MessageProperties;
  6.  
    import org.springframework.amqp.rabbit.core.RabbitTemplate;
  7.  
    import org.springframework.beans.factory.annotation.Autowired;
  8.  
    import org.springframework.web.bind.annotation.GetMapping;
  9.  
    import org.springframework.web.bind.annotation.RequestParam;
  10.  
    import org.springframework.web.bind.annotation.RestController;
  11.  
     
  12.  
    @RestController
  13.  
    public class MsgController {
  14.  
     
  15.  
     
  16.  
    @Autowired
  17.  
    RabbitTemplate rabbitTemplate;
  18.  
     
  19.  
     
  20.  
    @GetMapping("/sendTTLMsg")
  21.  
    public String sendTTLMsg(@RequestParam String msg){
  22.  
    MessageProperties properties = new MessageProperties();
  23.  
    properties.setExpiration("3000");
  24.  
    Message msgobj = new Message(msg.getBytes(),properties);
  25.  
    rabbitTemplate.convertAndSend("my_ttl_queue",msgobj);
  26.  
    return "消息发送成功!";
  27.  
    }
  28.  
    }

我们访问url进行条用Controller进行调用发送消息代码,并可以通过rabbitmq控制台查看队列信息情况。同样我们可以在rabbit控制台中查看消息处理情况,我们可以通过隔秒刷新看到此时消息会在3秒时间内从0变1后又从1变0。同时也可以看出在既有设置失效时间的队列上以及设置时间的消息上,以时间小的为最终失效时间。

RabbitMq消息过期时间TTL介绍的更多相关文章

  1. RabbitMQ(三)RabbitMQ消息过期时间(TTL)

    在RabbitMQ(二)AMQP协议mandatory和immediate标志位区别中我们提到,在RabbitMQ3.0以后的版本里,去掉了immediate参数支持,要实现类似的确认功能要使用TTL ...

  2. 【RabbitMQ 实战指南】一 过期时间TTL

    RabbitMQ 可以对消息和队列设置过期时间(TTL) 1.设置消息的TTL 目前有两种方式可以设置消息的TTL 第一种方式是通过队列属性设置,队列中所有消息都有相同的过期时间 第二种方式是对消息本 ...

  3. ActiveMQ队列消息过期时间设置和自动清除解决方案

    版本 apache-activemq-5.15.3 1.消息过期设置 参数详情 1)message过期则客户端不能接收 2)ttlCeiling:表示过期时间上限(程序写的过期时间不能超过此时间,超过 ...

  4. RabitMq过期时间TTL

    第一种:给消息设置过期时间 启动一个插件 @Bean public DirectExchange DirectExchange() { return new DirectExchange(" ...

  5. rabbitmq - (消息队列) 的基本原理介绍

    介绍 MQ全称为Message Queue, 是一种分布式应用程序的的通信方法,它是消费-生产者模型的一个典型的代表,producer往消息队列中不断写入消息,而另一端consumer则可以读取或者订 ...

  6. C# .net 使用rabbitmq消息队列——EasyNetQ插件介绍

    EasyNetQ 是一个简洁而适用的RabbitMQ .NET类库,本质上是一个在RabbitMQ.Client之上提供服务的组件集合.

  7. RabbitMQ消息队列+安装+工具介绍

    1.MQ为Message Queue,消息队列是应用程序和应用程序之间的通信方法 2. 多种开发语言支持,其实就是一个驱动,如连接数据库的mysql驱动,oracle驱动等. 3. 4.采用以下语言开 ...

  8. RabbitMQ之TTL(Time-To-Live 过期时间)

    本文转载自RabbitMQ之TTL(Time-To-Live 过期时间) 概述 RabbitMQ可以对消息和队列设置TTL. 目前有两种方法可以设置.第一种方法是通过队列属性设置,队列中所有消息都有相 ...

  9. RabbitMQ 设置消息的TTL(过期时间)

    我们在RabbitMQ中发布消息时,在代码中有两种方法设置某个队列的消息过期时间: 1.针对队列来说,可以使用x-message-ttl参数设置当前队列中所有消息的过期时间,即当前队列中所有的消息过期 ...

  10. rabbitMq 学习笔记(二) 备份交换器,过期时间,死信队列,死信队列

    备份交换器 备份交换器,英文名称为 Altemate Exchange,简称庙,或者更直白地称之为"备胎交换器". 生产者在发送消息的时候如果不设置 mandatory 参数, 那 ...

随机推荐

  1. JS 正则表示式 字符串匹配 忽略大小写

    在项目中遇到了需要使用字符串进行正则匹配,同时还要忽略大小写可以按照以下方法:1 先使用new RegExp(newVal, 'i')生成需要匹配的规则,其中 'i' 表示忽略大小写2 再对相应的字符 ...

  2. Spring开闭原则的表现-BeanPostProcessor的扩展点-1

    上接Spring事务处理时自我调用的解决方案及一些实现方式的风险继续分析,在分析上篇的问题之前,我们需要了解下BeanPostProcessor概念和Spring容器创建Bean的流程. 一.Bean ...

  3. MySQL底层概述—7.优化原则及慢查询

    大纲 1.Explain概述 2.Explain详解 3.索引优化数据准备 4.索引优化原则详解 5.慢查询设置与测试 6.慢查询SQL优化思路 1.Explain概述 使用Explain关键字可以模 ...

  4. Python 学习记录(3)

    数据 主要是对Pandas相关的数据帧等做处理和一定的可视化 Pandas对数据帧各列的运算 import seaborn as sns import pandas as pd #从Seaborn 当 ...

  5. BurpSuite-暴力破解以及验证码识别绕过

    声明! 学习视频来自B站up主 泷羽sec 有兴趣的师傅可以关注一下,如涉及侵权马上删除文章,笔记只是方便各位师傅的学习和探讨,文章所提到的网站以及内容,只做学习交流,其他均与本人以及泷羽sec团队无 ...

  6. AspNetCore全局异常处理

    在开发ASP.NET Core应用程序时,全局异常处理是一个重要的概念.它允许我们集中处理应用程序中未捕获的异常,确保应用程序的稳定性和用户体验. 1. 为什么需要全局异常处理 全局异常处理的目的是为 ...

  7. docker部署最新6.2版Zabbix Server端

    一.安装docker,参见本博客docker安装文档. 二.启动空的mysql -e MYSQL_DATABASE="zabbix" \ -e MYSQL_USER="z ...

  8. docker containner挂掉,无法exec进入bash,如何修改文件的终极解决方法

    场景: Nginx在bash里面配置的时候挂掉了,然后docker start不起来,exec bash进不去,造成无法再改里面的文件了 解决方法: 1,docker ps –a 可以查到所有dock ...

  9. 【C#】【平时作业】习题-5-类的基础知识

    一.概念题 1. 举例说明什么是类,什么是对象,并说明类与对象的关系? 类:具有相同特性(数据元素)和行为(功能)的对象的抽象就是类. 对象:对象是人们要进行研究的任何事物,它不仅能表示具体的事物,还 ...

  10. jacoco-实战篇-增量覆盖率

    我fork的jacoco源码改造好:https://github.com/exmyth/jacoco 入口:https://github.com/exmyth/jacoco/blob/master/o ...