第三方推送方案選擇

背景

第三方介入開放平臺後,開放平臺須要將設備狀態、屬性等值發給第三方,目前使用的方案是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

 

ACL mqadmin配置管理命令只有在4.5.2纔有,自編譯安裝包

 

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 &

rocketmq-4.5.2.tar.gz

建立或修改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管理後臺集成:

充分利用rocketmq-console的功能,在開放平臺調用rocketmq-console api便可以作到建立topic等一系列頁面可進行的操做

(不建議直接去操做mqadmin,其實操做原理就是rocketmq-console的代碼邏輯)

調用流程以下圖

 

風險點:

一、rocketmq-console不支持ACL(支持時間點未知)

二、自編譯及部署rocketmq-console,調用API時可能須要公網調用(後期可視狀況集成到eureka)

 

 

 

各語言SDK

 

語言

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

https://github.com/messense/rocketmq-python

https://github.com/apache/rocketmq-client-python

 

44(已驗證)

69

 

其餘未競功能參考連接:https://helpcdn.aliyun.com/document_detail/102996.html?spm=a2c4g.11174283.6.605.51f2449cmu4RPW

相關文章
相關標籤/搜索