今天的博客主题
MQ消息中间件 --》RocketMQ --》RocketMQ进阶(三)
本文主要讲解RocketMQ的ACL和生产者消费者实现ACL及ACL底层实现原理刨根问底
ACL介绍(访问控制列表)
该特性主要为 RocketMQ 提供权限访问控制。
用户可以通过 yml 配置文件来定义权限访问的相关属性,包括白名单 IP 地址、用户的 AK/SK 访问秘钥对、Topic 和 ConsumerGroup 的访问权限。
这样 Topic 资源之间也就具备了一定的隔离性,用户无法访问没有权限的 Topic 资源。
同时,开源用户使用带有 ACL 鉴权信息的开源客户端可以无缝对接云 MQ,而无需对业务系统进行任何的其他改造。。。
在使用RocketMQ权限控制时,在Client客户端通过 RPCHook注入AccessKey和SecretKey签名。
同时,将对应的权限控制属性(包括Topic访问权限、IP白名单和AccessKey和SecretKey签名等)设置在distribution/conf/plain_acl.yml的配置文件中。Broker端对AccessKey所拥有的权限进行校验,校验不过,抛出异常。
服务端核心配置文件
# 全局IP白名单
globalWhiteRemoteAddresses:
# 详细配置
accounts:
# 生产者秘钥
- accessKey: PG_PUB_LKL
secretKey: 123123123
# 用户白名单
whiteRemoteAddress:
# 是否管理员账户(不是管理员就要配置的详细点,topic/group(consumer)都要)
admin: false
# 默认的Topic权限
defaultTopicPerm: PUB
# 默认的ConsumerGroup权限
defaultGroupPerm: PUB
# 各个Topic的权限
topicPerms:
- TOPIC_DEMO_KL=PUB
# 各个ConsumerGroup的权限
groupPerms:
# the group should convert to retry topic
- CG_DEMO_KL=SUB
# 消费者秘钥
- accessKey: CG_SUB_LKL
secretKey: 123123123
# 用户白名单
whiteRemoteAddress:
# 是否管理员账户(不是管理员就要配置的详细点,topic/group(consumer)都要)
admin: false
# 默认的Topic权限
defaultTopicPerm: PUB|SUB
# 默认的ConsumerGroup权限
defaultGroupPerm: PUB|SUB
# 各个Topic的权限
topicPerms:
- TOPIC_DEMO_KL=SUB
# 各个ConsumerGroup的权限
groupPerms:
# the group should convert to retry topic
- CG_DEMO_KL=SUB
# admin秘钥
- accessKey: rocketmq2
secretKey: 12345678
# 用户白名单
whiteRemoteAddress:
# if it is admin, it could access all resources
admin: true
/conf/plain_acl.yml 是热加载修改完不需要重启broker。 (抛出一个问题,服务端是怎么热加载配置文件的?)
在配置好权限属性之后,需要开启aclEnable,在broker.conf配置文件增加配置,这样服务端就开启了权限。
## if acl is open,the flag will be true
aclEnable=true
生产者使用ACL
生产者服务配置文件增加配置
rocketmq:
name-server: 127.0.0.1:9876
producer:
# 权限认证
access-key: rocketmq2
secret-key: 12345678
只需要配置上就行,因为我们使用的是rocketmq-spring-boot-starter。在启动时候就会给实例化完成了。
DefaultMQProducer 我们已经知道这个类是做什么的了,就不详说了。
DefaultMQProducer提供的构造函数 会有 RPCHook 提供权限构造函数
生产者实例化权限访问核心代码
消费者使用ACL
同样消费者配置文件增加配置
rocketmq:
name-server: 127.0.0.