在ActiveMQ Artemis中进行过滤。在集群中重新加载配置

时间:2018-09-05 11:58:30

标签: activemq-artemis

有关ActiveMQ Artemis中过滤的问题。

如果我有一个名为MyQueue.IN的队列和一个仅接受特定JMS标头的过滤器。假设是ORDER。

在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,现在应该每5秒重新发布一次Broker.xml中的配置。

但是当我将过滤器更改为

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

ActiveMQ Artemis中的配置未更改。

即使重新启动节点也不行。

它在集群中,但是我都改变了两侧的Broker.xml。

关于如何更改队列过滤器的任何想法?最好通过更改Broker.xml

/ Zeddy

1 个答案:

答案 0 :(得分:1)

您正在看到预期的行为。尽管此行为可能不直观或特别不友好,但这是为了保护数据完整性。队列是不可变的,因此一旦创建队列就无法更改。因此,要“更改”队列,必须将其删除并重新创建。当然,删除队列意味着丢失队列中的所有消息,这可能是灾难性的。通常,有两种删除队列并重新创建队列的方法:

  1. 在匹配的<config-delete-queues>FORCE</config-delete-queues>中设置<address-setting>。但是,这种方法目前存在问题,可以通过ARTEMIS-2076解决。
  2. 在代理运行时通过管理删除队列。可以通过JMX(例如,使用JConsole),Web控制台,Artemis CLI等来完成。一旦停止代理,请更新XML,然后重新启动代理。