天天看點

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編譯環境

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:592: undefined macro 'SN_RC_MQTT_FAILURE'

  我臨時解決的辦法是在./emq-relx/deps/emq_sn/include/emq_sn.hrl:56 行增加一個宏定義

1 -define(SN_RC_MQTT_FAILURE, 16#04).

  臨時解決編譯問題。

  這個依賴下載下傳過程會比較久,大部分是依賴與Github,下載下傳編譯後,目錄有136M大小

  

emq消息伺服器簡介

  下圖就是編譯好了

   

emq消息伺服器簡介

  編譯後,産生一個_rel 目錄,這個目錄下的檔案,就是我們在官網上 http://emqtt.com/downloads 下載下傳後解壓的結果了。兩者基本是一樣的。

  運作

   

emq消息伺服器簡介

1 ./bin/emqttd start

2 ./bin/emqttd_ctl status

3 ./bin/emqttd stop

  控制台位址: http://127.0.0.1:18083 預設使用者密碼 admin/public

  更多核心調優,請參考官方文檔。

  幾個常用端口,也可以看一下

   

emq消息伺服器簡介

5. EMQ運作

  運作後,可以打開 http://host:18083 登入到背景管理界面。沒什麼說的,就在上面玩一會。

  

emq消息伺服器簡介

 作者:無腦仔的小明