5G 时代,万物互联消息引擎!EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。Erlang/OTP 是出色的软实时(Soft-Realtime)、低延时(Low-Latency)、分布式(Distributed) 的语言平台。MQTT 是轻量的(Lightweight)、发布订阅模式(PubSub) 的物联网消息协议。
EMQ X 项目设计目标是承载移动终端或物联网终端海量 MQTT 连接,并实现在海量物联网设备间快速低延时消息路由:
稳定承载大规模的 MQTT 客户端连接,单服务器节点支持50万到100万连接。
分布式节点集群,快速低延时的消息路由,单集群支持1000万规模的路由。
消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。
完整物联网协议支持,MQTT、MQTT-SN、CoAP、WebSocket 或私有协议支持。
文章摘要
本篇文章介绍源码编译安装EMQX,后续需要搭配自定义插件将mqtt消息转发到Kafka消息中间件里。
我们选择EMQX 开源版,如果要将消息持久化到Kafka里(收费的企业版里支持),需要自行编写插件,幸好Github有开源的kafka插件,我们找V3的一个稳定版本以便能适配kafka插件(目前还没适配3.1或更高版本),因此我们选择3.0.1版本,我们编译安装这个版本。
安装Erlang
EMQ 消息服务器基于 Erlang/OTP 平台开发,源码编译依赖 Erlang 环境。EMQX 3.0 依赖Erlang 21.3 版本。
yum install gcc* glibc-devel makencurses-devel openssl-devel autoconf -y yum install unixODBC unixODBC-devel-y yum -y install gcc-c++ kernel-develm4 python-simplejson
下载安装包(注意版本号21.3)
wget http://erlang.org/download/otp_src_21.3.tar.gz(80几M,下载很慢) tar -zxvf otp_src_21.3.tar.gz cd otp_src_21.3 ./otp_build autoconf (带上ssl模块) ./configure --enable-smp-support--enable-threads --enable-sctp --enable-kernel-poll --enable-hipe --with-ssl make && make install
erlang 默认安装路径 /usr/local/lib/erlang,验证版本:
erl
返回:
Erlang/OTP 21 [erts-10.3] [source][64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] Eshell V10.3 (abort with ^G)
注意,如果之前安装过不同的Erlang版本,安装新版本之前,需要先把老版本的安装目录/usr/local/lib/erlang删除之后再安装新版本,不然安装其他软件时会报编译版本错误。
安装Rebar(Erlang开发构建工具)
安装依赖rebar(注意rebar3是另外的新版本)
git clonegit://github.com/rebar/rebar.git cd rebar ./bootstrap
安装成功
==> rebar (compile) ==> rebar (escriptize) Congratulations! You now have aself-contained script called "rebar" in your current working directory. Placethis script anywhere in your path and you can use rebar to buildOTP-compliant apps.
配置环境变量
vi /etc/profile export PATH=/emq/rebar/:$PATH (rebar安装目录)
执行文件:
source /etc/profile
测试是否安装成功
rebar -V
若出现如下提示,则证明安装成功
rebar 2.6.4 22 20190625_031823 git2.6.4-39-gb6d3094
如果安装rebar3,可能有错误:
/emq/rebar3/_build/default/lib/erlware_commons/src/ec_plists.erl:834:Warning: erlang:get_stacktrace/0: deprecated; use the new try/catch syntax forretrieving the stack backtrace /emq/rebar3/_build/default/lib/erlware_commons/src/ec_plists.erl:836:Warning: erlang:get_stacktrace/0: deprecated; use the new try/catch syntax forretrieving the stack backtrace
解决方法:
使用https://github.com/ferd/erlware_commons/blob/ad2d57d8b62b86ec1f3d03441f7defa595f2c59c/src/ec_plists.erl替换ec_plists.erl文件。
安装EMQX 3.0.1
mkdir /emq cd /emq wget -c https://github.com/emqx/emqx-rel/archive/v3.0.1.tar.gz tar -zxvf v3.0.1.tar.gz mv emqx-rel-3.0.1 emqx-rel cd emqx-rel/ make(编译,很慢;可以先把下面的kafka插件增加进来后,再回到这里编译)
编译成功,返回:
===> Starting relx build process... ===> Resolving OTP Applicationsfrom directories: /emq/emqx-rel/deps /usr/local/lib/erlang/lib /emq/emqx-rel/apps ===> Resolved emqx-3.0.1 ===> Including Erts from/usr/local/lib/erlang ===> release successfully created!
启动 EMQ X
cd _rel/emqx/bin ./emqx start 启动 ./emqx_ctl status 状态
EMQX配置文件
/emq/emqx-rel/_rel/emqx/etc/emqx.conf #关闭匿名认证 mqtt.allow_anonymous = false #Erlang Process Limit node.process_limit = 2097152 #Sets the maximum number ofsimultaneously existing ports for this system node.max_ports = 1048576
好了,到这里 源码编译安装 EMQX 3.0.1 就完成了。