Фильтрация в ActiveMQ Artemis. Перезагрузка конфига в кластере - PullRequest
0 голосов
/ 05 сентября 2018

Вопрос о фильтрации в ActiveMQ Artemis.

Если у меня есть очередь с именем MyQueue.IN и фильтр, принимающий только определенные заголовки JMS. Допустим, ЗАКАЗАТЬ.

В Broker.xml под тегом

<core>
      <configuration-file-refresh-period>5000</configuration-file-refresh-period>

  <queues>
    <queue name="MyQueue.IN">
        <address>MyQueue.IN</address>
        <filter string="TOSTATUS='ORDER'"/>
        <durable>true</durable>
    </queue>
  </queues>
</core>

Когда я читал руководство, меняя Broker.xml, он теперь должен переконфигурировать конфигурацию в Broker.xml каждые 5 секунд.

Но когда я меняю фильтр на

<filter string="TOSTATUS='ORDERPICKUP'"/>

Конфигурация не изменена в ActiveMQ Artemis.

Даже если я перезапущу узел.

Он находится в кластере, но я изменил Broker.xml с обеих сторон.

Есть идеи, как поменять фильтр в очереди? Желательно, изменив Broker.xml

/ Zeddy

1 Ответ

0 голосов
/ 06 сентября 2018

Вы видите ожидаемое поведение. Хотя это поведение может быть не интуитивно понятным или особенно удобным для пользователя, оно предназначено для защиты целостности данных. Очереди неизменны, поэтому после их создания их нельзя изменить. Поэтому, чтобы «изменить» очередь, ее необходимо удалить и заново создать. Конечно, удаление очереди означает потерю всех сообщений в очереди, что потенциально может привести к катастрофическим последствиям. В общем, есть 2 способа удалить очередь и создать ее заново:

  1. Установите <config-delete-queues>FORCE</config-delete-queues> в соответствии <address-setting>. Однако в настоящее время существует проблема с этим подходом, которая будет решена с помощью ARTEMIS-2076 .
  2. Удалить очередь через управление во время работы брокера. Это можно сделать с помощью JMX (например, с помощью JConsole), веб-консоли, интерфейса командной строки Artemis и т. Д. После остановки посредника обновите XML, а затем перезапустите посредник.
...