4.18. 配置环队列
通常,AMQ Broker 中的队列使用先发(FIFO)语义。这意味着代理在队列的尾部添加信息,并将它们从头中删除。环队列是一种特殊的队列,它保存指定的固定消息数。当新消息到达时,代理通过删除队列头中的消息来维护固定队列大小,但队列已包含指定数量的消息。
例如,考虑配置了大小为 3
的 ring 队列,以及一个按顺序发送消息 A
、B、
和 C
D
的制作者。消息 C
到达队列后,队列中的消息数量达到配置的环形大小。此时,消息 A
位于队列的头头,而消息 C
则位于尾部。当消息 D
到达队列时,代理会将消息添加到队列的尾部。为了维护固定队列大小,代理会从队列头删除消息(即消息 A
)。消息 B
现在是队列的头部。
4.18.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
键添加到queue
元素中。指定一个值。例如:<addresses> <address name="myRing"> <anycast> <queue name="myRing" ring-size="5" /> </anycast> </address> </addresses>
您可以在代理运行时更新 ring-size
的值。代理会动态应用更新。如果新 ring-size
值小于前面值,则代理不会立即从队列头删除消息来强制实施新大小。发送至队列的新消息仍然会强制删除旧的消息,但队列不会达到新的、减小大小,直到客户端通过正常使用消息来正常使用。