第三方推送方案选择

背景

第三方介入开放平台后,开放平台须要将设备状态、属性等值发给第三方,目前使用的方案是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

相关文章
相关标签/搜索