zoukankan      html  css  js  c++  java
  • rabbitmq-高级(死信队列)

    设置过期时间

    • 声明一个DeadQueue
    @Configuration
    public class DeadRabbitmqConfiguration {
        //声明交换机
        @Bean
        public DirectExchange deadDirect(){
            return new DirectExchange("dead_direct_exchange",true,false);
        }
    
        //声明队列 给队列设置过期时间
        @Bean
        public Queue deadQueue(){
            return new Queue("dead.direct.queue",true);
        }
    
        @Bean
        public Binding deadBinding(){
            return BindingBuilder.bind(deadQueue()).to(deadDirect()).with("dead");
        }
    }
    
    • 设置死信交换机参数和死信key参数,主要看directTTLQueue()方法
    @Configuration
    public class TTLRabbitmqConfiguration {
        //声明交换机
        @Bean
        public DirectExchange ttlDirectExchange(){
    
            return new DirectExchange("ttl_order_exchange",true,false);
        }
    
        //声明队列 给队列设置过期时间
        @Bean
        public Queue directTTLQueue(){
            Map<String,Object> map = new HashMap<>();
            map.put("x-message-ttl",5000);//这里一定是int
            map.put("x-dead-letter-exchange","dead_direct_exchange");
            //因为是direct模式,所以需要设置一个key,fanout模式不需要配置
            map.put("x-dead-letter-routing-key","dead");
            return new Queue("ttl.direct.queue",true,false,false,map);
        }
    
        //具体消息
        @Bean
        public Queue directTTLMessageQueue(){
            return new Queue("ttl.message.direct.queue",true);
        }
    
        //完成交换机和队列绑定
        @Bean
        public Binding directTTLBinding(){
            return BindingBuilder.bind(directTTLQueue()).to(ttlDirectExchange()).with("ttl");
        }
    
        @Bean
        public Binding directMsgBinding(){
            return BindingBuilder.bind(directTTLMessageQueue()).to(ttlDirectExchange()).with("ttlmessage");
        }
    }
    
    • 测试
        @Test
        void contextLoads3() {
           orderService.makeOrderTTL("1","1",12);
        }
    
    • 打开rabbitmq服务,队列中的消息5s后自动加入死信queue中,5s后死信队列多了一条
      image
      image

    设置最大长度

    • 当队列中消息达到5条之后的都放在了死信队列中
        //声明队列 给队列设置过期时间
        @Bean
        public Queue directTTLQueue(){
            Map<String,Object> map = new HashMap<>();
            //map.put("x-message-ttl",5000);//这里一定是int
            map.put("x-max-length",5);
            map.put("x-dead-letter-exchange","dead_direct_exchange");
            //因为是direct模式,所以需要设置一个key,fanout模式不需要配置
            map.put("x-dead-letter-routing-key","dead");
            return new Queue("ttl.direct.queue",true,false,false,map);
        }
    
    • 测试运行(发送11条)
        @Test
        void contextLoads3() {
    
            for (int i = 0; i < 11; i++) {
                orderService.makeOrderTTL("1","1",12);
            }
        }
    
    • 打开rabbitmq服务(正常队列只有5条,其余的都在死信队列中)
      image

    既设置过期时间又设置最大长度

        @Bean
        public Queue directTTLQueue(){
            Map<String,Object> map = new HashMap<>();
            map.put("x-message-ttl",5000);//这里一定是int
            map.put("x-max-length",5);
            map.put("x-dead-letter-exchange","dead_direct_exchange");
            //因为是direct模式,所以需要设置一个key,fanout模式不需要配置
            map.put("x-dead-letter-routing-key","dead");
            return new Queue("ttl.direct.queue",true,false,false,map);
        }
    

    刚开始正常队列有5条,5秒后,这5条也到了死信队列中
    image
    image

  • 相关阅读:
    牛客练习赛27 水图(思维+暴搜)
    差分
    矩阵化一维
    倍增法 求公共祖先
    vector 牛逼 +lower_bound+ upper_bound
    cmp和sort
    字符串的比较
    s 贪心
    太鼓达人 (有位运算的作用,但可能理解错了哈哈)
    kao shi di er ti(还没有订正)
  • 原文地址:https://www.cnblogs.com/kaka-qiqi/p/14891422.html
Copyright © 2011-2022 走看看