zoukankan      html  css  js  c++  java
  • Springboot整合RabbitMQ(四)——设置消息过期时间TTL

    主要有2种方式:

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

    1、指定消息的过期时间

    @RestController
    public class TTLController {
        @Autowired
        private RabbitTemplate rabbitTemplate;
    
        @PostMapping("/testTTL")
        public String testTTL() {
            MessageProperties messageProperties = new MessageProperties();
            messageProperties.setExpiration("20000"); // 设置过期时间,单位:毫秒
            byte[] msgBytes = "测试消息自动过期".getBytes();
            Message message = new Message(msgBytes, messageProperties);
            rabbitTemplate.convertAndSend("TTL_EXCHANGE", "TTL", message);
            return "ok";
        }
    }
    

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

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

    2、给队列中的所有消息设置过期时间

    @Configuration
    public class TTLQueueRabbitConfig {
        @Bean
        public Queue TTLQueue() {
            Map<String, Object> map = new HashMap<>();
            map.put("x-message-ttl", 30000); // 队列中的消息未被消费则30秒后过期
            return new Queue("TTL_QUEUE", true, false, false, map);
        }
    
        @Bean
        public DirectExchange TTLExchange() {
            return new DirectExchange("TTL_EXCHANGE", true, false);
        }
    
        @Bean
        public Binding bindingDirect() {
            return BindingBuilder.bind(TTLQueue()).to(TTLExchange()).with("TTL");
        }
    }
    

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

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

     
    TTL队列

    如果同时指定了Message TTLQueue TTL,则优先较小的那一个。

    RabbitMQ原生API实现消息自动过期

    参考资料

    代码地址



    作者:砒霜拌辣椒
    链接:https://www.jianshu.com/p/341c63cf0459
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
  • 相关阅读:
    UML学习笔记<1>
    安装和配置jBPM4,并举个hello.w
    Myeclipse--jBPM4.3插件
    今天讲座的感悟--java
    程序员必看的书
    SSH的整合
    一款Timer倒计时器
    一款jq的计时器
    Code Complete-13/7/29
    java-Timer类使用方法
  • 原文地址:https://www.cnblogs.com/yuluoxingkong/p/13965204.html
Copyright © 2011-2022 走看看