热门标签 | 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;导致消息的堆积。


 


推荐阅读
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 如何查询zone下的表的信息
    本文介绍了如何通过TcaplusDB知识库查询zone下的表的信息。包括请求地址、GET请求参数说明、返回参数说明等内容。通过curl方法发起请求,并提供了请求示例。 ... [详细]
  • 图像因存在错误而无法显示 ... [详细]
  • RabbitMq之发布确认高级部分1.为什么会需要发布确认高级部分?在生产环境中由于一些不明原因,导致rabbitmq重启,在RabbitMQ重启期间生产者消息投递失败,导致消息丢 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • React项目中运用React技巧解决实际问题的总结
    本文总结了在React项目中如何运用React技巧解决一些实际问题,包括取消请求和页面卸载的关联,利用useEffect和AbortController等技术实现请求的取消。文章中的代码是简化后的例子,但思想是相通的。 ... [详细]
  • Spring常用注解(绝对经典),全靠这份Java知识点PDF大全
    本文介绍了Spring常用注解和注入bean的注解,包括@Bean、@Autowired、@Inject等,同时提供了一个Java知识点PDF大全的资源链接。其中详细介绍了ColorFactoryBean的使用,以及@Autowired和@Inject的区别和用法。此外,还提到了@Required属性的配置和使用。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
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社区 版权所有