关于 ActiveMQ Artemis 中过滤的问题。
如果我有一个名为 MyQueue.IN 的队列和一个只接受特定 JMS 标头的过滤器。比方说订单。
在经纪人中.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>
当我阅读手册时,更改代理.xml它现在应该每 5 秒在代理中重新配置.xml一次。
但是当我将过滤器更改为
<filter string="TOSTATUS='ORDERPICKUP'"/>
配置在ActiveMQ Artemis中没有更改。
即使我重新启动节点也不会。
它在一个集群中,但我在两边都更改了经纪人.xml。
关于如何更改队列过滤器的任何想法?最好通过更改经纪人.xml
/泽迪
您看到的是预期的行为。尽管此行为可能不直观或特别用户友好,但它旨在保护数据完整性。 队列是不可变的,因此一旦创建就无法更改。 因此,要"更改"队列,必须将其删除并重新创建。 当然,删除队列意味着丢失队列中的所有消息,这可能是灾难性的。 通常,有两种方法可以删除队列并重新创建队列:
- 在匹配的
<address-setting>
中设置<config-delete-queues>FORCE</config-delete-queues>
。但是,这种方法目前存在一个问题,将通过ARTEMIS-2076解决。
在 - 代理运行时通过管理删除队列。这可以通过JMX(例如使用JConsole(,Web控制台,Artemis CLI等来完成。停止代理后,更新 XML,然后重新启动代理。