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

ActiveMQ 如何为单个队列(queue)和主题(topic)配置独立访问权限

Apache ActiveMQ 单队列/单主题细粒度访问权限配置方案

1. 基础认证插件配置(权限控制前置依赖)

首先需要在conf/activemq.xml的<broker>标签内配置基础账号密码及用户分组,这是细粒度权限分配的基础:

<plugins>
    <!-- 基础认证插件:配置用户、密码、所属用户组 -->
    <simpleAuthenticationPlugin>
        <users>
            <authenticationUser username="prod_order_sender" password="send123" groups="order_sender_group"/>
            <authenticationUser username="prod_order_receiver" password="recv123" groups="order_receiver_group"/>
            <authenticationUser username="admin" password="admin123" groups="admin_group"/>
        </users>
    </simpleAuthenticationPlugin>
</plugins>

示例中分别创建了消息发送方、消息接收方、管理员三类账号,分属不同用户组,可根据实际业务调整账号、密码、分组规则。

2. 授权插件配置(单队列/单主题权限控制)

在上述同一个<plugins>标签内,追加授权插件配置,支持针对单个队列、单个主题分别配置三类权限:

  • 读权限(read):可消费消息、查看队列深度
  • 写权限(write):可发送消息到对应目的地
  • 管理权限(admin):可创建/删除目的地、绑定持久化订阅等
<!-- 细粒度目的地授权插件 -->
<authorizationPlugin>
    <map>
        <authorizationMap>
            <authorizationEntries>
                <!-- 单个队列配置:针对名为order.push.queue的队列单独分配权限 -->
                <authorizationEntry queue="order.push.queue" 
                    read="order_receiver_group,admin_group" 
                    write="order_sender_group,admin_group" 
                    admin="admin_group"/>
                <!-- 通配符批量配置:匹配所有order开头的队列 -->
                <authorizationEntry queue="order.>" 
                    read="order_receiver_group,admin_group" 
                    write="order_sender_group,admin_group" 
                    admin="admin_group"/>
                <!-- 默认队列权限:未匹配到上述规则的队列走该配置 -->
                <authorizationEntry queue=">" 
                    read="admin_group" 
                    write="admin_group" 
                    admin="admin_group"/>
                
                <!-- 单个主题配置:针对名为order.status.topic的主题单独分配权限 -->
                <authorizationEntry topic="order.status.topic" 
                    read="order_receiver_group,admin_group" 
                    write="order_sender_group,admin_group" 
                    admin="admin_group"/>
                <!-- 通配符批量配置:匹配所有order开头的主题 -->
                <authorizationEntry topic="order.>" 
                    read="order_receiver_group,admin_group" 
                    write="order_sender_group,admin_group" 
                    admin="admin_group"/>
                <!-- 默认主题权限:未匹配到上述规则的主题走该配置 -->
                <authorizationEntry topic=">" 
                    read="admin_group" 
                    write="admin_group" 
                    admin="admin_group"/>
                
                <!-- 临时目的地权限:Java客户端部分场景会自动创建临时队列/主题,按需配置 -->
                <authorizationEntry tempQueue=">" 
                    read="order_sender_group,order_receiver_group,admin_group" 
                    write="order_sender_group,order_receiver_group,admin_group" 
                    admin="admin_group"/>
                <authorizationEntry tempTopic=">" 
                    read="order_sender_group,order_receiver_group,admin_group" 
                    write="order_sender_group,order_receiver_group,admin_group" 
                    admin="admin_group"/>
            </authorizationEntries>
        </authorizationMap>
    </map>
</authorizationPlugin>

3. Java客户端适配说明

不需要修改业务逻辑,仅需要在创建JMS连接时传入对应账号密码即可,服务端会自动校验权限:

ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("tcp://activemq服务地址:61616");
// 传入对应业务账号密码即可
Connection connection = factory.createConnection("prod_order_sender", "send123");
connection.start();

若账号无对应目的地的访问权限,客户端会抛出javax.jms.JMSException: User xxx is not authorized to xxx类异常。

注意事项

  • 权限匹配优先级为精准匹配 > 通配符匹配 > 默认规则,配置时需注意规则顺序
  • 通配符>表示匹配该层级及以下所有层级,.是层级分隔符,*表示匹配单个层级
  • 该配置仅针对Java客户端JMS访问权限,和Web控制台权限完全独立,不会互相影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 12:06:03