7.3.2. 阻塞 AMQP 制作者
Core 和 OpenWire 等协议使用窗口大小流控制系统。在这个系统中,信用代表字节,并分配给生产者。如果制作者希望发送消息,制作者必须等待消息的大小得到足够的学分。
相比之下,AMQP 流控制贡献不代表字节。相反,AMQP 贡献度代表了生产者被允许发送的消息数量,而不考虑消息大小。因此,在某些情况下,AMQP 生产者可能会明显超过地址 的 max-size-bytes
值。
因此,要阻止 AMQP 制作者,您必须使用不同的配置元素 max-size-bytes-reject-threshold
。对于匹配的地址或一组地址,此元素指定内存中所有 AMQP 消息的最大大小(以字节为单位)。当内存中所有消息的总大小达到指定的限制时,代理会阻止 AMQP 生产者发送进一步消息。
以下步骤演示了如何为 AMQP 消息制作者配置消息阻塞。
先决条件
- 您应该熟悉如何配置地址和地址设置。如需更多信息,请参阅 第 4 章 配置地址和队列。
流程
-
打开
<broker_instance_dir>/etc/broker.xml
配置文件。 对于您已为匹配地址或地址 集 配置的
address-setting
元素,请指定内存中所有 AMQP 消息的最大大小。例如:<address-settings> <address-setting match="my.amqp.blocking.address"> ... <max-size-bytes-reject-threshold>300000</max-size-bytes-reject-threshold> ... </address-setting> </address-settings>
max-size-bytes-reject-threshold
代理在进一步阻止 AMQP 消息前,地址允许的最大内存大小,以字节为单位。您指定的值还支持字节表示法,如 "K"、"MB" 和 "GB"。默认情况下,
max-size-bytes-reject-threshold
设置为-1
,这意味着没有最大大小。注意如果在
address
,则该值将应用到 每个 匹配地址。指定这个值 并不意味着 所有匹配地址 的总 大小都仅限于-setting 元素中指定了 max-size-bytes-reject-
thresholdmax-size-bytes-reject-threshold
的值。
在前面的示例中,当发送到地址 my.amqp.blocking.address
的消息超过内存中 300000 字节时,代理开始阻止来自 AMQP 制作者的其他消息。