物联网架构成长之路(3)-EMQ消息服务器了解
1. 了解
物联网最基础的就是通信了。通信协议,物联网协议好像有那么几个,以前各个协议都有优劣,最近一段时间,好像各大厂商都采用MQTT协议,所以我也不例外,不搞特殊,采用MQTT协议,选定了协议,接下来就是选一个MQTT服务器(Broker),项目初期肯定是使用开源的解决方案会好一点,一方面是有人为之填坑,一方面可以快速搭建原型。等以后有人、有资源、有用户,在自己定制开发一套系统。基于各种考虑(更多的是领导的要求)选择了国人开发的MQTTBroker EMQ框架 (http://emqtt.com/),目前最新版本是2.3.1 接下来大部分环境都是基于此版本的。
2. Erlang语言
一开始叫我学习这个语言我还是拒绝的,当然现在也是。其实我还是比较倾向于Java实现的MQTTBroker - Moquette 这个的。没办法,需要就学咯。
学习Erlang,我是在http://www.erlang-cn.com/这里找个快速入门的,简单了解一下语法和语言特性。没有怎么深入理解,这个在目前不是重点,在后面开发插件时,边写边学才是最快的。总结几个与以往有所区别的特性吧:
(1)非面向对象,面向函数(并发)编程
(2)无循环结构,只能通过递归实现,尽量采用尾递归
(3)变量不可变
(4)无数组概念,不能通过下标访问
(5)Erlang消息传递机制
3. EMQ框架
这个http://emqtt.com/ 是中文的官网,这个http://emqtt.io/ 是英文的官网。由于是国人自己开发的,加上我自己英文不好,其实看中文文档就可以了。文档 http://emqtt.com/docs/v2/index.html 在 http://emqtt.com/downloads 这里下载个可以用的版本,然后跟着文档一步一步就可以搭建起来了。没有什么可以说的,我说的还没有官方文档好。里面的一些知识点和商业吹捧也可以了解一下。
4. EMQ编译、安装
好了,这部分才是重点,由于官网提供的是二进制可运行版本,但是每个公司对应的业务需求都不同,所有就需要进行二次开发。EMQ提供的二次开发机制是,建议使用插件方式进行扩展。所以这里就需要下载源码了。
安装Erlang/OTP 框架
安装 emq-relx EMQ编译环境
git clone https://github.com/emqtt/emq-relx
cd emq-relx
make
这个make过程会比较久,会下载一大堆依赖,依赖存放在 deps 目录,然后把编译结果存放在 _rel 目录下,实际生产过程中,就是拷贝这个 _rel 目录下的所有文件就可以了。
我在当前(2017-12-21)版本下,编译的时候遇到以下这个问题
src/emq_sn_gateway.erl:: undefined macro 'SN_RC_MQTT_FAILURE'
我临时解决的办法是在./emq-relx/deps/emq_sn/include/emq_sn.hrl:56 行增加一个宏定义
-define(SN_RC_MQTT_FAILURE, #).
临时解决编译问题。
这个依赖下载过程会比较久,大部分是依赖与Github,下载编译后,目录有136M大小
下图就是编译好了
编译后,产生一个_rel 目录,这个目录下的文件,就是我们在官网上 http://emqtt.com/downloads 下载后解压的结果了。两者基本是一样的。
运行
./bin/emqttd start
./bin/emqttd_ctl status
./bin/emqttd stop
控制台地址: http://127.0.0.1:18083 默认用户密码 admin/public
更多内核调优,请参考官方文档。
几个常用端口,也可以看一下
5. EMQ运行
运行后,可以打开 http://host:18083 登录到后台管理界面。没什么说的,就在上面玩一会。
最新文章
- centos+scala2.11.4+hadoop2.3+spark1.3.1环境搭建
- Xcode6中如何去掉默认的Main.storyboard
- Linux课程实践四:ELF文件格式分析
- uva12716 gcd
- XML学习笔记(四)-- 修饰XML文档的CSS
- [emacs org-mode小技巧] org-indent-mode 让文档更容易阅读
- GDI+与图形编程研究
- hdu 4627 The Unsolvable Problem(暴力的搜索)
- java android面试题分析总结
- [LeetCode] N皇后问题
- 微信小程序左右滑动切换图片酷炫效果(附效果)
- zabbix添加自定义监控项目
- 长沙IT二十年
- WebSocket原理与实践(一)---基本原理
- [转]:Android 5.0的调度作业JobScheduler
- python 运行脚本报错 from keyword import iskeyword as _iskeyword ImportError: cannot import name iskeyword,说明python环境坏了,得重装,尚不知具体原因,
- iOS开发学习-放大长图与屏幕等宽
- Linux文件属性和权限管理
- Max Sum Plus Plus (动态规划) HDU1024
- jQuery UI 给button添加ID
热门文章
- 062 hive中的常用方法(case,cast,unix_timestamp)
- python新手总结(二)
- Python HTTP 请求时对重定向中的 cookie 的处理
- C# EF 与 MySql 的那些坑
- 潭州课堂25班:Ph201805201 爬虫基础 第四课 Requests (课堂笔记)
- 最小生成树之克鲁斯卡尔(kruskal)算法
- C# try catch finally简单介绍和应用
- 2016年7款最佳 Java 框架
- android:碎片的生命周期
- VMware内CentOS7虚拟机硬盘扩容