4.19. 配置环队列
通常,AMQ 代理中的队列使用先进(FIFO)语义。这意味着代理将消息添加到队列的尾部,并将它们从头中删除。环队列是一种特殊类型的队列,存放指定的固定消息数。代理会在新消息到达时删除队列头的消息,但队列已保存指定数量的邮件,以此维护固定队列大小。
例如,一个环队列配置了大小为 3
,制作者按顺序发送消息 A
、B
、C
和 D
。消息 C
到达队列后,队列中的消息数已达到配置的环大小。此时消息 A 处于
队列的头部,而消息 C 位于
尾部。当消息 D
到达队列时,代理会将消息添加到队列的尾部。要维护固定队列大小,代理会在队列头删除消息(即消息 A
)。消息 B
现在处于队列的头部。
4.19.1. 配置环队列
以下步骤演示了如何配置环队列。
流程
-
打开
<broker_instance_dir>/etc/broker.xml
配置文件。 要在匹配地址上为未设置明确环大小的所有队列定义默认环大小,请在
address-setting 元素中指定
的值。例如:default-ring-
size<address-settings> <address-setting match="ring.#"> <default-ring-size>3</default-ring-size> </address-setting> </address-settings>
default-ring-size
参数对于定义自动创建的队列的默认大小特别有用。default-ring-size
的默认值为-1
(即无大小限制)。若要在特定队列上定义环大小,请将
ring-size
键添加到队列
元素中。指定一个值。例如:<addresses> <address name="myRing"> <anycast> <queue name="myRing" ring-size="5" /> </anycast> </address> </addresses>
您可以在代理运行时更新 ring-size
值。代理会动态应用更新。如果新的 ring-size
值小于之前的值,代理不会立即从队列头中删除消息来强制实施新大小。发送到队列的新消息仍会强制删除较旧的消息,但队列的大小不会达到新的、减小的大小,除非通过客户端正常使用的消息而自动执行此操作。