在 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" 一个队列,它必须被删除并重新创建。当然,删除队列意味着丢失队列中的所有消息,这可能是灾难性的。一般来说,删除队列并重新创建队列有两种方法:
- 在匹配的
<address-setting>
中设置<config-delete-queues>FORCE</config-delete-queues>
。但是,这种方法目前存在一个问题,将通过 ARTEMIS-2076. 解决。
- 在代理 运行 时通过管理删除队列。这可以通过 JMX(例如使用 JConsole)、Web 控制台、Artemis CLI 等来完成。代理停止后,更新 XML,然后重新启动代理。