第三方介入開放平臺後,開放平臺須要將設備狀態、屬性等值發給第三方,目前使用的方案是HTTP方式推送,可是因爲數據量大,使用HTTP推送有很大的侷限性;php
通過評估,使用rocketmq可很好的解決該問題;html
開放平臺將設備狀態、屬性值等資源發送到MQ,第三方消費對應的topic便可java
利用rocketmq的acl功能,開放平臺使用admin權限,根據appid將設備信息發送到對應的topic,而後再開放平臺上開放指定的topic的訂閱權限node
官網地址:http://rocketmq.apache.org/ python
下載安裝包及源碼地址:https://github.com/apache/rocketmqc++
ACL權限控制:https://github.com/apache/rocketmq/blob/master/docs/cn/acl/user_guide.mdgit
rocketmq console支持acl issue:https://github.com/apache/rocketmq-externals/pull/244 該功能未上線,master代碼也無github
多topic時,rocketmq性能影響:https://www.cnblogs.com/felixzh/p/6198174.html----rocketmq支持萬級別的topic(broker和nameserver心跳時,萬級別topic可能須要發送幾十m的數據)apache
rocketmq使用netty作的長鏈接,netty單機長鏈接數支持萬級別----rocketmq長鏈接理論知足業務要求api
rocketmq源碼編譯步驟:
一、下載源碼包(https://github.com/apache/rocketmq),獲得源碼 rocketmq-master.zip
二、解壓unzip rocketmq-master.zip
三、cd rocketmq-master
四、idea導入工程
五、maven編譯
mvn -Prelease-all -DskipTests clean install -U
六、cd distribution/target/rocketmq-4.5.2/rocketmq-4.5.2/conf
七、修改broker.conf ,開啓acl, 新增一行:aclEnable=true
八、返回主目錄:cd ..
九、啓動namesrv:nohup sh bin/mqnamesrv &
十、啓動broke:nohup sh bin/mqbroker -c conf/broker.conf -n localhost:9876 &
建立或修改ACL用戶信息:
sh mqadmin updateAclConfig -n 127.0.0.1:9876 -b 127.0.0.1:10911 -a RocketMQ111 -s 1234567809123 -t topicH=SUB -g groupH=SUB
其餘命令參見:
https://github.com/apache/rocketmq/blob/master/docs/cn/acl/user_guide.md
查看用戶信息見文件:
more ../conf/plain_acl.yml
rocketmq加上ACL後,mqadmin支持命令以下:
類型 |
是否支持 |
命令 |
不添加ACL |
|
---|---|---|---|---|
查詢ACL版本信息 | 支持 | sh mqadmin clusterAclConfigVersion -n 127.0.0.1:9876 -c DefaultCluster |
不支持 | |
查看集羣 | 支持 | sh mqadmin clusterList -n 127.0.0.1:9876 |
支持 | |
刪除用戶 | 支持 | sh mqadmin deleteAccessConfig -n 127.0.0.1:9876 -c DefaultCluster -a RocketMQ222 |
不支持 | |
刪除topic | 支持 | sh mqadmin deleteTopic -c DefaultCluster -n 127.0.0.1:9876 -t topicq |
支持 | |
根據id查詢消息 | 支持 | sh mqadmin queryMsgById -i 0A0007AD00002A9F000000000000AD3E -n 127.0.0.1:9876 |
支持 | |
根據key查詢消息 | 不支持 | sh mqadmin queryMsgByKey -n 127.0.0.1:9876 -t topicH -k 12345678 |
支持 | https://github.com/apache/rocketmq/issues/1409 |
查看topic列表 | 支持 | sh mqadmin topicList –n 127.0.0.1:9876 |
支持 | |
Topic路由信息 |
支持 | sh mqadmin topicRoute -n 127.0.0.1:9876 -t topicH |
支持 | |
topic統計信息 | 支持 | sh mqadmin topicStatus -t topicH -n 127.0.0.1:9876 |
支持 | |
建立或更新用戶 | 支持 | sh mqadmin updateAclConfig -n 127.0.0.1:9876 -b 127.0.0.1:10911 -a RocketMQ222 -s 1234567809123 -t topicJ=SUB -g groupJ=SUB | 不支持 | |
建立topic | 支持 | sh mqadmin updateTopic -b 127.0.0.1:10911 -t topicq |
支持 |
可能BUG點:
producer.queryMessage 沒法根據key查詢
producer.viewMessage沒法根據msgid查詢sendResult.getMsgId(),只能根據union key查詢!不開啓acl可查詢
充分利用rocketmq-console的功能,在開放平臺調用rocketmq-console api便可以作到建立topic等一系列頁面可進行的操做
(不建議直接去操做mqadmin,其實操做原理就是rocketmq-console的代碼邏輯)
調用流程以下圖
風險點:
一、rocketmq-console不支持ACL(支持時間點未知)
二、自編譯及部署rocketmq-console,調用API時可能須要公網調用(後期可視狀況集成到eureka)
語言 |
git鏈接地址 |
來源 |
star |
---|---|---|---|
語言 |
git鏈接地址 |
來源 |
star |
java | |||
Node.js |
https://github.com/apache/rocketmq-client-nodejs | 70 | |
go | https://github.com/apache/rocketmq-client-go | 159 | |
php | https://github.com/apache/rocketmq-externals/tree/master/rocketmq-client-php https://github.com/apache/rocketmq-externals/tree/master/rocketmq-php |
rocketmq-externals | 1981(externals) |
.net | https://github.com/apache/rocketmq-externals/tree/master/rocketmq-client-dotnet | rocketmq-externals | 1981(externals) |
c++ | https://github.com/apache/rocketmq-client-cpp | 134 | |
python | 44(已驗證) 69 |
其餘未競功能參考連接:https://helpcdn.aliyun.com/document_detail/102996.html?spm=a2c4g.11174283.6.605.51f2449cmu4RPW