我正在为我的 Artemis 代理定义以下 Broker.xml 属性:
<address-settings>
<!--default for catch all-->
<address-setting match="#">
<dead-letter-address>DLQ</dead-letter-address>
<expiry-address>ExpiryQueue</expiry-address>
<redelivery-delay>0</redelivery-delay>
<message-counter-history-day-limit>10</message-counter-history-day-limit>
<address-full-policy>PAGE</address-full-policy>
<auto-create-queues>true</auto-create-queues>
<auto-create-addresses>true</auto-create-addresses>
<!-- MY CUSTOMIZATION - BEGIN -->
<default-purge-on-no-consumers>true</default-purge-on-no-consumers>
<auto-delete-queues>true</auto-delete-queues>
<auto-delete-queues-delay>300000</auto-delete-queues-delay>
<auto-delete-addresses>true</auto-delete-addresses>
<auto-delete-addresses-delay>300000</auto-delete-addresses-delay>
<!-- MY CUSTOMIZATION - END -->
<!-- The size of each page file -->
<page-size-bytes>10M</page-size-bytes>
<!-- When we start applying the address-full-policy, e.g paging -->
<!-- Both are disabled by default, which means we will use the global-max-size/global-max-messages -->
<max-size-bytes>-1</max-size-bytes>
<max-size-messages>-1</max-size-messages>
<!-- When we read from paging into queues (memory) -->
<max-read-page-messages>-1</max-read-page-messages>
<max-read-page-bytes>20M</max-read-page-bytes>
<!-- Limit on paging capacity before starting to throw errors -->
<page-limit-bytes>-1</page-limit-bytes>
<page-limit-messages>-1</page-limit-messages>
</address-setting>
<!-- MY CUSTOMIZATION - BEGIN -->
<address-setting match="/app/control">
<auto-create-dead-letter-resources>false</auto-create-dead-letter-resources>
</address-setting>
<!-- MY CUSTOMIZATION - END -->
<!-- MY CUSTOMIZATION - BEGIN -->
<address-setting match="notificationsTopic">
<auto-create-dead-letter-resources>false</auto-create-dead-letter-resources>
</address-setting>
<!-- MY CUSTOMIZATION - END -->
<!-- MY CUSTOMIZATION - BEGIN -->
<address-setting match="DLQ">
<max-size-bytes>104857600</max-size-bytes>
<auto-delete-queues-delay>604800000</auto-delete-queues-delay>
<default-ring-size>10000</default-ring-size>
</address-setting>
<!-- MY CUSTOMIZATION - END -->
<!-- MY CUSTOMIZATION - BEGIN -->
<address-setting match="ExpiryQueue">
<max-size-bytes>104857600</max-size-bytes>
<auto-delete-queues-delay>604800000</auto-delete-queues-delay>
<default-ring-size>10000</default-ring-size>
</address-setting>
<!-- MY CUSTOMIZATION - END -->
<!-- MY CUSTOMIZATION - BEGIN -->
<address-setting match="$sys.mqtt.#">
<default-purge-on-no-consumers>false</default-purge-on-no-consumers>
</address-setting>
<!-- MY CUSTOMIZATION - END -->
</address-settings>
我正在尝试检查是否正确应用了以下自定义设置,但是,当我检查地址和队列属性时,没有应用这些设置。
例如,在地址 DLQ 中创建的队列应具有 10000 的环大小,因为参数 default-ring-size 设置为 10000。 控制台显示以下内容:
检查与地址匹配的队列时$sys.mqtt.#也会发生同样的情况; default-purge-on-no-consumers 设置为 false 并且控制台显示的值为 true:
这样,我就找不到在控制台中得到很好反映的单个自定义值。
我还检查了日志,没有发现任何迹象表明这些值不正确。 为什么我无法反映控制台指定的值?有没有更好的测试方法?
更新 最近我发现直接将设置应用于队列确实有效。例如:
<address name="DLQ" >
<anycast>
<queue name="DLQ" ring-size="5" />
</anycast>
</address>
但是在地址中设置它根本不起作用:
<address-setting match="DLQ">
<default-ring-size>5</default-ring-size>
</address-setting>
我认为发生的情况是,您在启动代理时没有使用其中一些
address-setting
元素,此时我们创建了队列。然后添加 address-setting
元素并重新启动代理。但是,由于队列已创建,因此未应用新值,因为它们仅在创建队列时应用。因此,您最终会处于一种奇怪的状态,其中队列的运行时状态与配置不匹配。
处理此问题的最简单方法是停止代理并执行
rm -Rf ../data
以删除所有现有队列和数据。然后,当代理重新启动时,它将使用新的 address-settings
值重新创建所有这些队列。