10.2.2. 阻塞消息
由于多个制作者可以和同一地址关联,因此代理可能会在所有生产者中分配比实际可用更多的信贷。但是,您可以在任何防止代理发送分数超过可用值的任何地址上设置最大值。
在默认配置中,每个地址使用全局最大 100Mb 大小。当地址已满时,代理会将进一步的信息写入分页日志,而不是将其路由到队列。您可以阻止客户端发送更多信息,而不必分页,直到您使用了旧的消息。以这种方式阻止生产者流控制,防止代理耗尽内存,因为生产者在任何一个时间点上发送多个消息。
在配置中,块制作者流控制基于每个 address-setting
进行管理。配置适用于注册到地址的所有队列。换句话说,绑定到该地址的所有队列的总内存上限为 max-size-bytes
的值。
注意
阻塞取决于协议。在 AMQ Broker 中,AMQP、OpenWire 和 CoreWire 支持生产流程控制。但是,AMQP 会以不同的方式处理流程控制。如需更多信息 ,请参阅使用 AMQP 进行传输控制。
为地址配置最大大小
要将代理配置为在最大字节数范围内阻止消息,请向 BROKER_INSTANCE_DIR /etc/broker.xml 添加新的 addres-setting
配置元素到 BROKER_INSTANCE_DIR/etc/broker.xml
。
步骤
-
在下面的示例配置中,
address-settings
被设置为BLOCK
producers,在达到其最大大小为300000
字节后发送消息。
<configuration> <core> ... <address-settings> <address-setting match="my.blocking.queue"> 1 <max-size-bytes>300000</max-size-bytes> 2 <address-full-policy>BLOCK</address-full-policy> 3 </address-setting> </address-settings> </core> </configuration>