RabbitMQ笔记十九:Queue Length Limit

Queue Length Limit

RabbitMQ笔记十九:Queue Length Limit_第1张图片
创建一个x-max-length参数值为5的队列

测试队列中最多只有5个消息,当第六条消息发送过来的时候,会删除最早的那条消息。队列中永远只有5条消息。

RabbitMQ笔记十九:Queue Length Limit_第2张图片
创建x-max-length-bytes属性的queue

往这个队列发送消息,第一条消息为11,第二条为2222,第三条市3333,然后再发送的话就会将最先入队列的第一条消息删除,如果删除之后还是不够存储新的消息,依次删除第二个消息,循环如此。

使用代码声明含有x-max-lengthx-max-length-bytes属性的队列

配置类

@Configuration
public class MQConfig {

    @Bean
    public ConnectionFactory connectionFactory(){
        CachingConnectionFactory factory = new CachingConnectionFactory();
        factory.setUri("amqp://zhihao.miao:[email protected]:5672");
        return factory;
    }

    @Bean
    public RabbitAdmin rabbitAdmin(ConnectionFactory connectionFactory){
        RabbitAdmin rabbitAdmin = new RabbitAdmin(connectionFactory);
        return rabbitAdmin;
    }

    @Bean
    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory){
        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
        return rabbitTemplate;
    }

    @Bean
    public Queue queue1(){
       Map arguments = new HashMap<>();
       //表示队列中最多存放三条消息
       arguments.put("x-max-length",3);
        return new Queue("weixin",true,false,false,arguments);
    }

    @Bean
    public Queue queue2(){
        Map arguments = new HashMap<>();
        //表示队列中最多存放三条消息
        arguments.put("x-max-length-bytes",10);
        return new Queue("eamil",true,false,false,arguments);
    }
}

应用启动类

@ComponentScan
public class Application {
    public static void main(String[] args) throws Exception{
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(Application.class);
        RabbitTemplate rabbitTemplate = context.getBean(RabbitTemplate.class);

        byte[] body = "hello".getBytes();

        MessageProperties messageProperties = new MessageProperties();
        messageProperties.setContentType("json");

        Message message = new Message(body,messageProperties);

        rabbitTemplate.send("","weixin",message);

        TimeUnit.SECONDS.sleep(30);

        context.close();
    }
}

启动程序发现管控台生成了具有这二种属性的队列。

RabbitMQ笔记十九:Queue Length Limit_第3张图片
管控台

总结

Max length(x-max-length) 用来控制队列中消息的数量。
如果超出数量,则先到达的消息将会被删除掉。

Max length bytes(x-max-length-bytes) 用来控制队列中消息总的大小。
如果超过总大小,则最先到达的消息将会被删除,直到总大小不超过x-max-length-byte为止。

参考资料

官网地址

你可能感兴趣的:(RabbitMQ笔记十九:Queue Length Limit)