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

Filtering in ActiveMQ Artemis. Reload of config in a cluster

关于 ActiveMQ Artemis 中过滤的问题。

如果我有一个名为 MyQueue.IN 的 queue 和一个只接受特定 JMS Headers 的过滤器。让我们说订单。

在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。

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

/泽迪

您看到了预期的行为。尽管此行为可能不直观或对用户特别不友好,但它旨在保护数据完整性。队列是不可变的,因此一旦创建就无法更改。因此,对于 "change" 一个队列,它必须被删除并重新创建。当然,删除队列意味着丢失队列中的所有消息,这可能是灾难性的。一般来说,删除队列并重新创建队列有两种方法:

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