//Logo Image
「世大智科/天才家居」-我們創業囉
PDF Version

第六章 雲端伺服器與MQTT Broker建置

6.1    MQTT Broker的建置

目前網路上有許多MQTT Broker的方案,包括HiveMQRabbitMQApache ApolloMosquitto等,如圖6-1各個MQTT Broker所支援的功能都有些許差異,其中HiveMQ是一個付費的雲端MQTT BrokerRabbitMQ雖然有MQTT的插件,但是RabbitMQ主打的是AMQP協議,Apache Apollo的功能雖然完整,但經許久沒有維護,故選擇目前最多人在使用且開源的Mosquitto MQTT Broker

6-1. 各個MQTT Broker的比較

Mosquitto是一個實現了MQTT 3.1協議的開源MQTT代理服務器,由eclipse.org所維護運行的一個計劃,非常輕量且容易安裝,更有跨平台的特性,目前支援WindowsOSXLinuxRaspberry Pi等平台。本研究使用Windows Server 2008伺服器,安裝的步驟僅需至Mosquitto官方網站下載屬於Windows的安裝包,按照安裝步驟需要下載額外的.dll檔案,安裝完成在指令模式中執行mosquitto.exe的執行檔就能開啟Mosquitto MQTT BrokerMosquitto MQTT Broker預設通訊埠為1883,並限制最大連線數為1024個客戶端連線,此限制可以透過Mosquitto根目錄下的.conf檔案以TXT文本格式開啟,如圖6-2,即可找到#port 1883,可以將1883修改為0~65535間的數字作為新的連接埠,修改#max_connections 1024,將1024修改為-1即可取消1024個連線數的限制,最後存檔重新運行Mosquitto.exe即可使用新的組態。

6-2. Mosquitto根目錄中.conf檔案裡的連線埠與連線數設定

6.2    ASP.NET MQTT客戶端

本研究使用ASP.NET開發網頁服務服務,使用C#作為開發語言,同時C#也可以開發Windows應用程式,可以在網頁上使用MQTT服務,也可以使用Windows應用程式常駐於背景訂閱各項主題,接收各項「天才家居」產品的感測器資訊,並儲存至SQL資料庫。

M2Mqtteclipse.org.NETWinRT所提供的MQTT 客戶端函式庫,此函式庫為開源計畫並提供了完整的MQTT功能。如圖6-3使用此函式庫的方法首先需要創建一個MqttClient客戶端,傳入MQTT Broker的主機位置與連接埠,並設定使用的是MQTT 3.1協議,使用MqttClientConnect()方法帶入Client ID連線至MQTT Broker,接著傳入接受訂閱訊息的Handler方法,此方法可以監聽訂閱的訊息;接著即可使用MqttClient內的Publish()Subscribe()方法。

監聽訂閱的Handler方法會傳入MqttMsgPublishEventArgs的物件,此物件內包括傳入的主題(Topic)與負載(Payload),可以透過此物件的實例ee.Topic方法獲取主題,以e.Message方法獲得負載,負載回傳為byte陣列,如傳送的是字串文字,需要以Encoding.UTF8.GetString()方法獲取UTF編碼之字串。

6-3. M2Mqtt函式庫各項客戶端方法