我正在尝试在 activeMQ 5.8.0 下使用 JMS 实现一个新应用程序。有几个应用程序配置为生产者(即在 MQ 中转储消息),两个主题,然后配置消费者查看在 Tomcat 服务器启动时动态创建的 VirtualTopic。
示例流程如下:
Producer1 (Tomcat) --JMS--> ActiveMQ.VirtualTopic
Consumer.VirtualTopic1 --JMS--> Consumer1 (Tomcat)
Consumer.VirtualTopic2 --JMS--> Consumer2 (Tomcat)
我们希望能够灵活地启动任意数量的消费者,并让 ActiveMQ 动态地向他们发送消息。这是可行的。但是,当消费者服务器关闭时(无论是由于不再需要它、服务器崩溃、网络中断等原因),我希望 AMQ 停止将消息放在其 VirtualTopic 上,因为流控制正在启动,并且不再使用来自生产者的消息。
我的activemq.xml配置如下:
<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" dataDirectory="${activemq.data}" schedulePeriodForDestinationPurge="10000">
<policyEntry queue=">" gcInactiveDestinations="true" inactiveTimoutBeforeGC="30000" />
因此,我期望在 Tomcat 节点停止后 40 秒内将服务器标记为非活动状态(并且消费者数量被标记为零),但这并没有发生。我是否遗漏了什么?
谢谢!
答案1
我自己找到了答案,对 ActiveMQ 更熟悉一些。队列确实会自动删除,但前提是没有待处理的消息。实施此解决方案的应用程序处理恒定的消息流(每秒 20 - 5000 条),因此永远不会有删除队列的窗口。