ActiveMQ Artemis Broker.xml 配置未应用

问题描述 投票:0回答:1

我正在为我的 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。 控制台显示以下内容: DLQ default-ring-size

检查与地址匹配的队列时$sys.mqtt.#也会发生同样的情况; default-purge-on-no-consumers 设置为 false 并且控制台显示的值为 true: $sys.mqtt.# purgeOnNoConsumers

这样,我就找不到在控制台中得到很好反映的单个自定义值。

我还检查了日志,没有发现任何迹象表明这些值不正确。 为什么我无法反映控制台指定的值?有没有更好的测试方法?

更新 最近我发现直接将设置应用于队列确实有效。例如:

<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>
java xml activemq-artemis
1个回答
0
投票

我认为发生的情况是,您在启动代理时没有使用其中一些

address-setting
元素,此时我们创建了队列。然后添加
address-setting
元素并重新启动代理。但是,由于队列已创建,因此未应用新值,因为它们仅在创建队列时应用。因此,您最终会处于一种奇怪的状态,其中队列的运行时状态与配置不匹配。

处理此问题的最简单方法是停止代理并执行

rm -Rf ../data
以删除所有现有队列和数据。然后,当代理重新启动时,它将使用新的
address-settings
值重新创建所有这些队列。

© www.soinside.com 2019 - 2024. All rights reserved.