【问题标题】:ActiveMQ - How to clear the queue when ActiveMQ instance startActiveMQ - 如何在 ActiveMQ 实例启动时清除队列
【发布时间】:2013-10-24 14:48:49
【问题描述】:

当我启动或重新启动 activeMQ 实例时,如何清除/清除选定的队列(例如 FOO.BAR)。

有没有办法可以在 activemq.xml 中配置或任何其他方式来处理这个问题?

请注意,我的集群环境当前正在运行两个 ActiveMQ 实例(实例 1 和实例 2)。

注意:我不想使用deleteAllMessagesOnStartup="true",因为它会删除所有可用队列。

我正在尝试将 Apache Camel 与 ActiveMQ 一起使用。所以请让我知道我们是否也可以使用 Camel 完成这项工作。

【问题讨论】:

    标签: activemq apache-camel


    【解决方案1】:

    您需要使用 JMX 清除方法来清除队列,或者使用 deleteAllMessagesOnStartup。没有清除单个队列或一组队列的配置,这是一个管理操作。如果您需要消息在一段时间后消失,请考虑使用一段时间来生活在消息上。

    【讨论】:

    • 嗨,蒂姆,正如我所提到的,我不能使用 deleteAllMessagesOnStartup,因为我不想清除所有队列。即使我使用 JMX 清除,当 ActiveMQ 实例重新启动时,我也无法清除队列。而且即使我使用时间来处理消息,这也无济于事,因为我不想根据时间使消息过期。
    • 好吧,那我猜你搞砸了
    【解决方案2】:

    你可以做的是自定义你的activemq启动脚本

    1. 启动activemq(显然)
    2. 使用 activemq-admin.bat 或 activemq-admin.sh 清除选定的队列

    语法如下:

    activemq-admin.bat purge name_of_your_broker name_of_the_queue
    

    这里的技巧是在 activemq 完全初始化时只启动第二个脚本。

    【讨论】:

    • 我同意你的想法,而且我已经尝试过了。但这里的问题是我正在使用 Apache Camel 路由,当 ActiveMQ 实例被盯着时,有可能在被 activemq-admin 清除之前处理​​了一些消息。
    【解决方案3】:

    由于我找不到任何直截了当的答案,我想用 ApacheCamel 来处理。设置

    ProducerTemplate sendBody 
    

    作为

    ascExchangePattern.InOut
    

    因此,如果客户端断开连接或 ActiveMQ 实例重新启动,那么那些待处理的队列消息将进入死信队列,我可以稍后处理这些消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-01
      • 2021-03-08
      • 2016-01-01
      • 1970-01-01
      • 2015-01-31
      • 2011-06-27
      • 2013-11-22
      • 2012-08-17
      相关资源
      最近更新 更多