热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

springboot整合rabbitmq设置消息过期时间TTL

主要有2种方式,如果同时指定了MessageTTL和QueueTTL,则优先较小的那一个:指定一条消息的过期时间。给队列设置消息过期时间&

主要有2种方式,如果同时指定了Message TTLQueue TTL,则优先较小的那一个:


  1. 指定一条消息的过期时间。

  2. 给队列设置消息过期时间,队列中的所有消息都有同样的过期时间。


队列设置的方式

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.HashMap;
import java.util.Map;@Configuration
public class DirectRabbitConfig {//队列 起名&#xff1a;TestDirectQueue&#64;Beanpublic Queue TestDirectQueue() {// durable:是否持久化,默认是false,持久化队列&#xff1a;会被存储在磁盘上&#xff0c;当消息代理重启时仍然存在&#xff0c;暂存队列&#xff1a;当前连接有效// exclusive:默认也是false&#xff0c;只能被当前创建的连接使用&#xff0c;而且当连接关闭后队列即被删除。此参考优先级高于durable// autoDelete:是否自动删除&#xff0c;当没有生产者或者消费者使用此队列&#xff0c;该队列会自动删除。Map map &#61; new HashMap<>();// 队列中的消息未被消费则10秒后过期map.put("x-message-ttl", 10000); return new Queue("TestDirectQueue", true, false, false, map);}//Direct交换机 起名&#xff1a;TestDirectExchange&#64;BeanDirectExchange TestDirectExchange() {return new DirectExchange("TestDirectExchange", true, false);}//绑定 将队列和交换机绑定, 并设置用于匹配键&#xff1a;TestDirectRouting&#64;BeanBinding bindingDirect() {return BindingBuilder.bind(TestDirectQueue()).to(TestDirectExchange()).with("TestDirectRouting");}}

声明队列时设置1个x-message-ttl的属性&#xff0c;并设置过期时间&#xff0c;凡是推送到该队列中的所有消息&#xff0c;都会有一个10秒后过期的属性。


可以看到创建的队列有TTL的特性&#xff0c;表示该队列中的消息会自动过期。



单独设置某条消息的方式

import cn.huawei.rabbitmqtest1.pojo.User;
import com.alibaba.fastjson.JSON;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageProperties;
import org.springframework.amqp.rabbit.connection.CorrelationData;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.nio.charset.StandardCharsets;
import java.util.UUID;&#64;RestController
public class SendMessageController {&#64;AutowiredRabbitTemplate rabbitTemplate; //使用RabbitTemplate,这提供了接收/发送等等方法&#64;GetMapping("/sendDirectMessage")public void sendDirectMessage() {MessageProperties messageProperties &#61; new MessageProperties();// 设置过期时间&#xff0c;单位&#xff1a;毫秒messageProperties.setExpiration("30000"); for (int i &#61; 1; i <&#61; 50; i&#43;&#43;) {//这个参数是用来做消息的唯一标识//发布消息时使用&#xff0c;存储在消息的headers中CorrelationData correlationData &#61; new CorrelationData(UUID.randomUUID().toString());User user &#61; new User(i &#43; "", "陈四 " &#43; i);Message message &#61; new Message(JSON.toJSONString(user).getBytes(StandardCharsets.UTF_8), messageProperties);rabbitTemplate.convertAndSend("TestDirectExchange", "TestDirectRouting", message, correlationData);}}
}

消息推送到队列后&#xff0c;如果指定时间内没有被消费&#xff0c;则会自动过期。


注意&#xff1a;
RabbitMQ只会对队列头部的消息进行过期淘汰。如果单独给消息设置TTL&#xff0c;先入队列的消息过期时间如果设置比较长&#xff0c;后入队列的设置时间比较短。会造成消息不会及时地过期淘汰&#xff0c;导致消息的堆积。


 


推荐阅读
  • Spring Boot + RabbitMQ 消息确认机制详解
    本文详细介绍如何在 Spring Boot 项目中使用 RabbitMQ 的消息确认机制,包括消息发送确认和消息接收确认,帮助开发者解决在实际操作中可能遇到的问题。 ... [详细]
  • 利用GitHub热门资源,成功斩获阿里、京东、腾讯三巨头Offer
    Spring框架作为Java生态系统中的重要组成部分,因其强大的功能和灵活的扩展性,被广泛应用于各种规模的企业级应用开发中。本文将通过一份在GitHub上获得极高评价的Spring全家桶文档,探讨如何掌握Spring框架及其相关技术,助力职业发展。 ... [详细]
  • Struts与Spring框架的集成指南
    本文详细介绍了如何将Struts和Spring两个流行的Java Web开发框架进行整合,涵盖从环境配置到代码实现的具体步骤。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 历经两个月,他成功斩获阿里巴巴Offer
    经过两个月的努力,一位普通的双非本科毕业生最终成功获得了阿里巴巴的录用通知。 ... [详细]
  • 本文详细探讨了 Java 中 Daemon 线程的特点及其应用场景,并深入分析了 Random 类的源代码,帮助开发者更好地理解和使用这些核心组件。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 深入解析Spring Cloud Ribbon负载均衡机制
    本文详细介绍了Spring Cloud中的Ribbon组件如何实现服务调用的负载均衡。通过分析其工作原理、源码结构及配置方式,帮助读者理解Ribbon在分布式系统中的重要作用。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了 Spring Boot 应用程序在不同配置下支持的最大并发连接数,重点分析了内置服务器(如 Tomcat、Jetty 和 Undertow)的默认设置及其对性能的影响。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 本文详细介绍了如何在 Windows 环境下使用 node-gyp 工具进行 Node.js 本地扩展的编译和配置,涵盖从环境搭建到代码实现的全过程。 ... [详细]
  • 本文介绍如何在Spring Boot项目中集成Redis,并通过具体案例展示其配置和使用方法。包括添加依赖、配置连接信息、自定义序列化方式以及实现仓储接口。 ... [详细]
  • RabbitMQ 核心组件解析
    本文详细介绍了RabbitMQ的核心概念,包括其基本原理、应用场景及关键组件,如消息、生产者、消费者、信道、交换机、路由键和虚拟主机等。 ... [详细]
  • 阿里巴巴终面技术挑战:如何利用 UDP 实现 TCP 功能?
    在阿里巴巴的技术面试中,技术总监曾提出一道关于如何利用 UDP 实现 TCP 功能的问题。当时回答得不够理想,因此事后进行了详细总结。通过与总监的进一步交流,了解到这是一道常见的阿里面试题。面试官的主要目的是考察应聘者对 UDP 和 TCP 在原理上的差异的理解,以及如何通过 UDP 实现类似 TCP 的可靠传输机制。 ... [详细]
author-avatar
少爷旅行
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有