You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在ActiveMQ Artemis中复刻ActiveMQ Classic的该使用场景?

复刻ActiveMQ Classic生产者通知与队列自动回收至ActiveMQ Artemis的方案

核心思路:用Artemis管理事件+自动删除机制替代Classic的生产者advisory

虽然Artemis没有直接对应Classic的生产者增删通知,但可以通过以下方式实现类似的动态队列监听与资源回收逻辑:

  • 配置队列自动删除规则
    在broker.xml中设置全局或匹配特定前缀的地址配置,让队列在无活动时自动回收:

    <address-setting match="clientname.#">
      <default-queue-config>
        <auto-delete>true</auto-delete>
        <auto-delete-delay>30000</auto-delete-delay> <!-- 30秒无活动后删除 -->
        <auto-delete-message-count>0</auto-delete-message-count>
        <auto-delete-consumers>0</auto-delete-consumers>
      </default-queue-config>
    </address-setting>
    

    规则逻辑:当队列没有消费者、没有生产者、消息数为0时,等待指定延迟后自动删除队列。

  • 监听队列创建/删除事件
    通过Artemis的管理通知机制监听队列的创建与删除事件:

    1. 监听到队列(如clientname.session1234)创建事件时,立即为该队列创建消费者监听器
    2. 监听到队列删除事件时,移除对应的监听器完成资源清理
      可通过JMX或Core Client的NotificationListener订阅QUEUE_CREATED和QUEUE_DELETED类型的管理事件。
  • 按需校验队列活动状态(备选)
    如果对事件监听实时性要求不高,可定期通过Artemis管理API查询队列状态:

    • 调用managementService.getQueueProducers(queueName)检查是否有生产者连接
    • 调用managementService.getQueueConsumers(queueName)检查消费者状态
    • 结合队列消息数判断,当满足无生产者、无消费者、无消息的条件时,主动移除监听器,依赖auto-delete机制回收队列

满足会话级流控需求的补充

针对每个会话独立流控的要求,Artemis支持对单个队列配置流控参数,无需重构为固定队列+属性模式:

  • 动态队列创建后,通过管理API为该队列单独设置max-size-bytes、page-size-bytes、address-full-policy等流控参数
  • 也可以在address-setting中通过匹配规则为不同前缀的队列预设流控策略,比如对clientname.*队列设置统一的初始流控配置,再按需调整

内容的提问来源于stack exchange,提问作者reid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 23:35:13