RocketMq是一款开源高性能,轻量级,统一消息传递引擎。经受住亿万级高并发的检验。许多企业系统都在使用。在并发削峰,异步处理,应用解耦的等场景都有它的身影。网上文章大多数介绍RocketMq的设计原理,集群配置,项目集成等。安全方面相对比较少,有出现的安全资料,在实际使用上也难走通。企业级系统安全方面也挺重要的,花了些时间研究RocketMq安全方面的,也有点收获,写此文章做总结,让小伙伴少走弯路。相信有些企业系统使用RocketMq的时候,没出现安全问题不会去开启安全校验的。
RocketMq安全相关功能主要是ACL权限管控。ACL是access control list的简称,俗称访问控制列表,想了解更多原理小伙伴,下方留言,有时间再发一些。ACL主要对用户角色,权限,资源访问的权限校验控制,个人理解是这样只有在RocketMq平台开通的合法账户,获得授权才能对RocketMq进行访问。ACL在4.4以后版本才有的,它出现使得RocketMq在很多对安全性要求较高的领域广泛使用。这次分享的是Windows版下Acl服务端与客服端的使用,Linux有疑问下方留言大家一起探讨。
1RocketMq服务端安装包下载(官网地址http://rocketmq.apache.org/)
1.1 登录上面官网地址
1.2 点击下载
1.2.1点击Latest release v4.7.1
1.2.2点击rocketmq-all-4.7.1-bin-release.zip
1.2.3解压如下
2 acl服务端配置开启
2.1 打开conf目录下broker.conf,加上aclEnable=true
2.1.1borker.conf增加参数配置
2.2 打开conf目录下plain_acl.yml,里面是配置账号,密码,权限的如下图
2.2.1用户资源权限配置文件
3服务开启命令
3.1进入到bin目录(上面截图1.2.3的目录)开启nameServer命令如下执行
.\mqnamesrv
3.2进入到bin目录(上面截图1.2.3的目录)开启broker命令如下,要指定broker.conf文件,不然acl开启失败,linux下也要指定.
.\mqbroker -n localhost:9876 -c F:\DeveTool\rocketmq-all-4.7.1-bin-release\rocketmq-all-4.7.1-bin-release\conf\broker.conf
4使用过程中一些问题
项目发送消息会出现Algorithm HmacSHA1 not available,把jdk目录下/jre/lib/ext/找到sunjce_provider.jar,复制到rocketmq/lib目录中,重启broker。
5实际项目应用,当服务端开启ACL,生产者与消费者端配置accessKey,secretKey,nameServer等,,accessKey类似用户名,secretKey类似密码,不然发送,接收消息失败。
5.1 依赖引用
<dependency>
<groupId>org.apache.rocketmq</groupId>
<artifactId>rocketmq-spring-boot-starter</artifactId>
<version>2.0.4</version>
</dependency>
5.2生产者端yml文件配置,rocketmq全新的一个配置,不属于其他项的。
5.2.1生产者端yml文件配置
rocketmq:
# rocketmq的NameServer地址
name-server: 127.0.0.1:9876
# 生产者端需要配置
producer:
# 必须指定一个group
group: groupB
send-message-timeout: 6000
access-key: rocketmq2
secret-key: 12345678
5.2.2 生产者测试代码。
@Service
public class RocketMqDemoServiceImpl implements RocketMqDemoService {
@Resource
private RocketMQTemplate rocketMQTemplate;
@Override
public void sendMessage() {
rocketMQTemplate.syncSend("topicB", "222");
}
}
5.3消费者配置
5.3.1yml文件配置
rocketmq:
# rocketmq的NameServer地址
name-server: 127.0.0.1:9876
5.3.2消费者监听业务对象类名上面配置
@RocketMQMessageListener(consumerGroup = "groupB", topic = "topicB",
accessKey = "rocketmq2",secretKey = "12345678")
5.3.3消费端监听器测试代码如下
@Component
@RocketMQMessageListener(consumerGroup = "groupB", topic = "topicB",
accessKey = "rocketmq2",secretKey = "12345678")
public class DemoMqListener implements RocketMQListener {
@Override
public void onMessage(Object o) {
System.out.println(o);
}
}
欢迎留言关注收藏点赞
网友评论