RocketMq是一款開源高性能,輕量級娱仔,統(tǒng)一消息傳遞引擎沐飘。經(jīng)受住億萬級高并發(fā)的檢驗(yàn)。許多企業(yè)系統(tǒng)都在使用牲迫。在并發(fā)削峰耐朴,異步處理,應(yīng)用解耦的等場景都有它的身影盹憎。網(wǎng)上文章大多數(shù)介紹RocketMq的設(shè)計(jì)原理筛峭,集群配置,項(xiàng)目集成等陪每。安全方面相對比較少影晓,有出現(xiàn)的安全資料镰吵,在實(shí)際使用上也難走通。企業(yè)級系統(tǒng)安全方面也挺重要的挂签,花了些時間研究RocketMq安全方面的疤祭,也有點(diǎn)收獲,寫此文章做總結(jié)饵婆,讓小伙伴少走彎路画株。相信有些企業(yè)系統(tǒng)使用RocketMq的時候,沒出現(xiàn)安全問題不會去開啟安全校驗(yàn)的啦辐。
RocketMq安全相關(guān)功能主要是ACL權(quán)限管控。ACL是access control list的簡稱蜈项,俗稱訪問控制列表芹关,想了解更多原理小伙伴,下方留言紧卒,有時間再發(fā)一些侥衬。ACL主要對用戶角色,權(quán)限跑芳,資源訪問的權(quán)限校驗(yàn)控制轴总,個人理解是這樣只有在RocketMq平臺開通的合法賬戶,獲得授權(quán)才能對RocketMq進(jìn)行訪問。ACL在4.4以后版本才有的博个,它出現(xiàn)使得RocketMq在很多對安全性要求較高的領(lǐng)域廣泛使用怀樟。這次分享的是Windows版下Acl服務(wù)端與客服端的使用,Linux有疑問下方留言大家一起探討盆佣。
1RocketMq服務(wù)端安裝包下載(官網(wǎng)地址http://rocketmq.apache.org/)
1.1 登錄上面官網(wǎng)地址
1.2 點(diǎn)擊下載
1.2.1點(diǎn)擊Latest release v4.7.1
1.2.2點(diǎn)擊rocketmq-all-4.7.1-bin-release.zip
1.2.3解壓如下
2 acl服務(wù)端配置開啟
2.1 打開conf目錄下broker.conf,加上aclEnable=true
2.1.1borker.conf增加參數(shù)配置
2.2 打開conf目錄下plain_acl.yml往堡,里面是配置賬號,密碼共耍,權(quán)限的如下圖
2.2.1用戶資源權(quán)限配置文件
3服務(wù)開啟命令
3.1進(jìn)入到bin目錄(上面截圖1.2.3的目錄)開啟nameServer命令如下執(zhí)行
? ? ? ? ? ??.\mqnamesrv
3.2進(jìn)入到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使用過程中一些問題
項(xiàng)目發(fā)送消息會出現(xiàn)Algorithm HmacSHA1 not available,把jdk目錄下/jre/lib/ext/找到sunjce_provider.jar痹兜,復(fù)制到rocketmq/lib目錄中穆咐,重啟broker。
5實(shí)際項(xiàng)目應(yīng)用,當(dāng)服務(wù)端開啟ACL字旭,生產(chǎn)者與消費(fèi)者端配置accessKey,secretKey,nameServer等,对湃,accessKey類似用戶名,secretKey類似密碼遗淳,不然發(fā)送熟尉,接收消息失敗。
5.1 依賴引用
? ? ? ? ? ?<dependency>
? ? ? ? ? ? ? ? <groupId>org.apache.rocketmq</groupId>
? ? ? ? ? ? ? ? <artifactId>rocketmq-spring-boot-starter</artifactId>
? ? ? ? ? ? ? ? <version>2.0.4</version>
? ? ? ? ? ? </dependency>
5.2生產(chǎn)者端yml文件配置,rocketmq全新的一個配置洲脂,不屬于其他項(xiàng)的斤儿。
5.2.1生產(chǎn)者端yml文件配置
? ?rocketmq:
? # rocketmq的NameServer地址
? name-server: 127.0.0.1:9876
? # 生產(chǎn)者端需要配置
? producer:
? ? # 必須指定一個group
? ? group: groupB
? ? send-message-timeout: 6000
? ? access-key: rocketmq2
? ? secret-key: 12345678
5.2.2 生產(chǎn)者測試代碼剧包。
@Service
public class RocketMqDemoServiceImpl implements RocketMqDemoService {
? ? @Resource
? ? private RocketMQTemplate rocketMQTemplate;
? ? @Override
? ? public void sendMessage() {
? ? ? ? rocketMQTemplate.syncSend("topicB", "222");
? ? }
}
5.3消費(fèi)者配置
5.3.1yml文件配置
rocketmq:
? # rocketmq的NameServer地址
? name-server: 127.0.0.1:9876
5.3.2消費(fèi)者監(jiān)聽業(yè)務(wù)對象類名上面配置
@RocketMQMessageListener(consumerGroup = "groupB", topic = "topicB",
? ? ? ? accessKey = "rocketmq2",secretKey = "12345678")
5.3.3消費(fèi)端監(jiān)聽器測試代碼如下
?@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);
? ? }
}
歡迎留言關(guān)注收藏點(diǎn)贊