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编译环境

  1. git clone https://github.com/emqtt/emq-relx
  2. cd emq-relx
  3. make

  这个make过程会比较久,会下载一大堆依赖,依赖存放在 deps 目录,然后把编译结果存放在 _rel 目录下,实际生产过程中,就是拷贝这个 _rel 目录下的所有文件就可以了。

  我在当前(2017-12-21)版本下,编译的时候遇到以下这个问题

  1. src/emq_sn_gateway.erl:: undefined macro 'SN_RC_MQTT_FAILURE'

  我临时解决的办法是在./emq-relx/deps/emq_sn/include/emq_sn.hrl:56 行增加一个宏定义

  1. -define(SN_RC_MQTT_FAILURE, #).

  临时解决编译问题。

  这个依赖下载过程会比较久,大部分是依赖与Github,下载编译后,目录有136M大小

  

  下图就是编译好了

  

  编译后,产生一个_rel 目录,这个目录下的文件,就是我们在官网上 http://emqtt.com/downloads 下载后解压的结果了。两者基本是一样的。

  运行

  

  1. ./bin/emqttd start
  2. ./bin/emqttd_ctl status
  3. ./bin/emqttd stop

  控制台地址: http://127.0.0.1:18083 默认用户密码 admin/public

  更多内核调优,请参考官方文档。

  几个常用端口,也可以看一下

  

5. EMQ运行

  运行后,可以打开 http://host:18083 登录到后台管理界面。没什么说的,就在上面玩一会。

  

物联网架构成长之路(3)-EMQ消息服务器了解的更多相关文章

  1. 物联网架构成长之路(31)-EMQ基于HTTP权限验证

    看过之前的文章就知道,我之前是通过搞插件,或者通过里面的MongoDB来进行EMQ的鉴权登录和权限验证.但是前段时间发现,还是通过HTTP WebHook 方式来调用鉴权接口比较适合实际使用.还是实现 ...

  2. 物联网架构成长之路(33)-EMQ数据存储到influxDB

    一.前言 时隔一年半,技术变化特别快,学习也要跟上才行.以前写过EMQ数据转存问题,当时用了比较笨的方法,通过写插件的方式,把MQTT里面的数据发送到数据库进行存储.当时也是为了学习erlang和em ...

  3. 物联网架构成长之路(4)-EMQ插件创建

    1. 说明 以下用到的知识,是建立在我目前所知道的知识领域,以后如果随着知识的拓展,不一定会更新内容.由于不是EMQ公司的人,EMQ的文档又很少,很多知识点都是靠猜的.2. 一些资料 架构设计 htt ...

  4. 物联网架构成长之路(5)-EMQ插件配置

    1. 前言 上一小结说了插件的创建,这一节主要怎么编写代码,以及具体流程之类的.2. 增加一句Hello World 修改 ./deps/emq_plugin_wunaozai/src/emq_plu ...

  5. 物联网架构成长之路(6)-EMQ权限控制

    1. 前言 EMQTT属于一个比较小众的开源软件,很多资料不全,很麻烦,很多功能都是靠猜测,还有就是看官方提供的那几个插件,了解. 2. 说明 上一小节的插件 emq_plugin_wunaozai ...

  6. 物联网架构成长之路(7)-EMQ权限验证小结

    1. 前言 经过前面几小节,讲了一下插件开发,这一小节主要对一些代码和目录结构进行讲解,这些都是测试过程中一些个人经验,不一定是官方做法.而且也有可能会因为版本不一致导致差异. 2. 目录结构 这个目 ...

  7. 物联网架构成长之路(25)-Docker构建项目用到的镜像1

    0. 前言 现在项目处于初级阶段,按照规划,先构建几个以后可能会用到的Image,并上传到阿里云的Docker仓库.以后博客中用到的Image,大部分都会用到这几个基础的Image,构建一个简单的物联 ...

  8. 物联网架构成长之路(8)-EMQ-Hook了解、连接Kafka发送消息

    1. 前言 按照我自己设计的物联网框架,对于MQTT集群中的所有消息,是要持久化到磁盘的,这里采用一个消息队列中间件Kafka作为数据缓冲,缓冲结果存到数据仓库中,以供后续作为数据分析.由于MQTT集 ...

  9. 物联网架构成长之路(35)-利用Netty解析物联网自定义协议

    一.前言 前面博客大部分介绍了基于EMQ中间件,通信协议使用的是MQTT,而传输的数据为纯文本数据,采用JSON格式.这种方式,大部分一看就知道是熟悉Web开发.软件开发的人喜欢用的方式.由于我也是做 ...

随机推荐

  1. 9.Django组件-cookie和session

    HTTP协议的无保存状态,对两次请求没有任何关联.每次请求都是相互独立的. 1.cookie简介 什么是会话跟踪技术我们需要先了解一下什么是会话!可以把会话理解为客户端与服务器之间的一次会晤,在一次会 ...

  2. 2.Django|简介与静态文件| URL控制器

    1.简介  MVC Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的.松耦合的方式连接在一起,模型负责业务对象与数 ...

  3. 077 Apache的HBase与cdh的hue集成(不建议不同版本之间的集成)

    1.修改hue的配置文件hue.ini [hbase] # Use full hostname with security. hbase_clusters=(Cluster|linux-hadoop3 ...

  4. 2n皇后问题【dfs】

    <题目链接> 题目描述 给定一个n*n的棋盘,棋盘中有一些位置不能放皇后.现在要向棋盘中放入n个黑皇后和n个白皇后,使任意的两个黑皇后都不在同一行.同一列或同一条对角线上,任意的两个白皇后 ...

  5. 洛谷 p1164 小A点菜 【dp(好题)】 || 【DFS】 【恰好完全装满】

    题目链接:https://www.luogu.org/problemnew/show/P1164 题目背景 uim神犇拿到了uoi的ra(镭牌)后,立刻拉着基友小A到了一家……餐馆,很低端的那种. u ...

  6. 初探和实现websocket心跳重连(npm: websocket-heartbeat-js)

    提示:文章最下方有仓库地址 心跳重连缘由 websocket是前后端交互的长连接,前后端也都可能因为一些情况导致连接失效并且相互之间没有反馈提醒.因此为了保证连接的可持续性和稳定性,websocket ...

  7. Python:安装MYSQL Connector

    在Python中安装MySQL Connector有如下三种方法: 1.直接安装客户端[建议使用] pip install mysqlclient 2.安装mysql连接器 pip install - ...

  8. [HAOI2016]食物链

    OJ题号:BZOJ4562.洛谷3183 思路:记忆化搜索. 本体可以转化成“求有向图中入度为0的结点到出度为0的结点的路径数”. 每次加边时记录每个结点的入度和出度,然后从入度为0的结点开始搜索,搜 ...

  9. [POI2014]Couriers

    OJ题号:BZOJ3524.BZOJ2223.洛谷3567 思路: 维护一颗可持久化权值线段树,记录每次加入数字时,不同数字出现的个数.对于每一个询问$[l,r]$,同时查询以$r$和$l-1$为根的 ...

  10. jsp get参数乱码问题

    摘自:username2.iteye.com/blog/1597917个人理解中文传送的时后需要转码: js代码: 要进行两次转码才不会出现乱码(默认为UTF-) encodeURI(encodeUR ...