rabbitmq官方文档翻译-15

队列长度限制

介绍

队列的最大长度可以限制为设定数量的消息,或设定的字节数(所有消息体长度的总和,忽略消息属性和任何开销),或两者。
对于任何给定队列,最大长度(任一类型)可以由使用队列参数的客户端定义,也可以在使用策略的服务器中定义。
在策略和参数都指定最大长度的情况下,应用这两个值中的最小值。
队列长度设置也可以由operator策略强制执行。

在所有情况下,使用就绪消息的数量;未确认的消息不计入限制。
来自rabbitmqctl list_queues的字段messages_ready和message_bytes_ready以及管理API显示将受限制的值。

默认最大队列长度行为

当设置最大队列长度或大小并达到最大值时,RabbitMQ的默认行为是从队列前面丢弃或写入死信(即队列中最旧的消息)。要修改此行为,请使用下面描述的overflow设置。

队列溢出行为

使用overflow设置配置队列溢出行为。如果overflow设置为reject-publish,则将丢弃最近发布的消息。此外,如果启用了发布商确认,则会通过basic.nack消息通知发布者拒绝。如果消息被路由到多个队列并被至少其中一个队列拒绝,则该频道将通过basic.nack通知发布者。该消息仍将发布到可以将其排队的所有其他队列。

使用策略定义最大队列长度

要使用策略指定最大长度,请将密钥max-length和/或max-length-bytes添加到策略定义中。
例如:
rabbitmqctl set_policy my-pol "^one-meg$" '{"max-length-bytes":1048576}' --apply-to queues
my-pol策略确保one-meg队列包含不超过1MiB的消息数据。达到1MiB限制时,将从队列头部丢弃最旧的消息。

要定义溢出行为 - 是从头部删除消息还是拒绝新发布,请将密钥溢出添加到策略定义中。
例如:
rabbitmqctl set_policy my-pol "^two-messages$" '{"max-length":2,"overflow":"reject-publish"}' --apply-to queues

my-pol策略确保two-messages 队列包含不超过2条消息,并且只要队列包含2条消息并且启用了发布者确认,所有其他发布都将发送basic.nack响应。

在声明期间使用x-argument定义最大队列长度

通过提供具有非负整数值的x-max-length队列声明参数,可以设置最大消息数。
可以通过提供具有非负整数值的x-max-length-bytes队列声明参数来设置最大字节长度。
如果两个参数都设置则两者都适用;首先命中的限制将被强制执行。

可以通过向字符串值提供x-overflow队列声明参数来设置溢出行为。
可能的值是drop-head(默认)或reject-publish

推荐阅读更多精彩内容

  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981阅读 6,468评论 1 8
  • 消费者确认和发布者确认 介绍 本指南涵盖了两个相关功能,即消费者确认和发布者确认,这些功能对于使用消息传递的应用程...
    wwq1988阅读 71评论 0 0
  • 利用RabbitMQ集群横向扩展能力,均衡流量压力,让消息集群的秒级服务能力达到百万,Google曾做过此类实验;...
    有货技术阅读 1,225评论 0 0
  • 死信exchange 介绍 来自队列的消息可以是“死信”;也就是说,当发生以下任何事件时,重新发布到交易所:消费者...
    wwq1988阅读 67评论 0 0
  • RabbitMQ 简介 MQ 消息队列,上承生产者,下接消费者。从生产者侧获取消息,然后将消息转发给消费者。由此可...
    2205阅读 1,203评论 1 9