背景
在不少项目中都有轻量级消息中间件传输数据,同时希望能将传输的数据保存下来,并对外提供restful的查询接口。根据以往经验,在这里推荐一种EMQX+MONGODB+NODE的组合方式,能够快速的搭建一套简单易用的消息传输-保存-查询一体化服务。
组件介绍
EMQX
通过MQTT消息实现消息的传输,支持发布-订阅等模块。
EMQ X Broker 是基于高并发的 Erlang/OTP 语言平台开发,支持百万级连接和分布式集群架构,发布订阅模式的开源 MQTT 消息服务器。EMQ X Broker 在全球物联网市场广泛应用。无论是产品原型设计、物联网创业公司、还是大规模的商业部署,EMQ X Broker 都支持开源免费使用。
mongoDB
典型的NoSQL数据库,天然对json结构的数据支持的很好。
mongoDB是一个基于分布式文件存储 [1] 的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引
NODE
基于express搭建的一个restful网关,同时提供接收mqtt消息以及mongoDB的写入功能。这个需要自己动手开发哦。写起来很简单,订阅全部mqtt消息,然后再收到数据时写入mongodb。
再提供几个restful接口就可以了。
架构示意图
扩展
- 对于更高性能的需求的话,可以考虑将NODE应用更新为Go应用,将MongoDB改为TDengine
- 实现这三个组件的docker化,只需要前面再加一个proxy即可。
- 同时这几个组件都是支持集群化的,可以横向扩展
总结
EMQX的企业版完全能够支持上述的功能,但上面的除了NODE需要一点点的开发之外都是开源直接使用的,免费的更香一点不是。