Shellbye.github.io
Shellbye.github.io copied to clipboard
RocketMQ ACL 权限控制列表消费者消费不了消息的问题解决笔记
问题描述
在上一篇文章 #66 中,我记录了解决 Algorithm HmacSHA1 not available 的一种方法,解决之后就可以顺利的通过 ACL 远程生产消息,但是在消费的时候,虽然我的 accessKey 和 secretKey 使用的都是和生产者一样的配置,但是很奇怪的问题就是我的消费者一直拿不到任何消息。在查看了一些日志之后,最后发现在 remoting.log 中有以下报错信息
org.apache.rocketmq.acl.common.AclException: No default permission for group:ConsumerGroup001
其中的ConsumerGroup001是我使用的消费者的组名,看样子是权限有问题。
解决方案
解决放啊就是把消费者的组名配置到 plain_acl.yml 中,结合上篇文章,最终如下
globalWhiteRemoteAddresses:
accounts:
- accessKey: RocketMQ
secretKey: 12345678
whiteRemoteAddress:
admin: false
defaultTopicPerm: DENY
defaultGroupPerm: SUB
topicPerms:
- topicA=DENY
- topicB=PUB|SUB
- topicC=SUB
groupPerms:
# the group should convert to retry topic
- groupA=DENY
- ConsumerGroup001=PUB|SUB
- groupC=SUB
- accessKey: rocketmq2
secretKey: 12345678
whiteRemoteAddress: 192.168.1.*
# if it is admin, it could access all resources
admin: true
这就可以可以顺利消费到生产者生产的消息了。
又一个BUG?
这里有一个很奇怪的地方,生产者在生产的时候,组名是可以随意定的,只要 accessKey 和 secretKey 是正确的就行,但是在消费者消费的时候,却需要把组名配置好。找到了一个官方文档,似乎 Group 相关的权限确实都是给消费者定义的,没有关于生产者的。
参考资料
- https://itzones.cn/2019/07/18/RocketMQ%E6%9D%83%E9%99%90%E6%8E%A7%E5%88%B6/