rabbitmq 限制队列长度和总字节数

前言

本篇将介绍如何通过参数和policy策略来设置queue的最大长度或queue中所有消息的最大总字节数。

具体配置

配置queue的最大长度和最大总字节数,我们既可以通过参数进行配置,也可以通过在管理界面新增policy来配置。当两者都有配置时,则是最小的那个配置为准。队列的最大长度限制为设定数量的消息或设定数量的总字节(仅所有消息体字节的总和,忽略消息属性等)。

  1. 参数配置

    x-max-length属性用于控制queue的最大长度 ——非负整数;x-max-length-bytes属性用于控制queue中所有消息的最大总字节数 ——非负整数

    Map<String, Object> args = new HashMap<String, Object>();
    args.put("x-max-length", 10); // 设置queue的最大长度10
    args.put("x-max-length-bytes", 1024); // 设置最大总字节数1KB
    channel.queueDeclare("myqueue", false, false, false, args);

     

  2.  policy配置

rabbitmq 限制队列长度和总字节数

总结

通过上述的方式,我们可以很方便的限定queue的长度和总字节大小,当queue达到限制的阈值时,如果此queue配置了dead-lettered,则queue最前面的消息将被转发到dead-lettered,如果没有配置则最前面的消息将会被直接丢弃。从而达到通过转发或丢弃queue最前面的消息,来为新消息腾出空间的目的。对于已经投递给消费者但还未收到ack确认的消息是不计入限制的。默认情况下,rabbitmq中的queue的最大长度和总字节数不受限制的(仅受全局内存,磁盘阈值的影响)。

 

转载自    http://www.pandan.xyz/2017/03/12/rabbitmq%20限制队列长度和总字节数/