「認識MQTT」文章提到,MQTT的訊息全都透過稱為代理人(broker)的伺服器交流。本文將說明頗受歡迎的開放原始碼MQTT伺服器Mosquitto,在Windows系統上的安裝流程,以及替MQTT伺服器開啟Windows防火牆埠號的步驟。
下載與安裝Mosquitto
Mosquitto(註:這個名稱和英文的蚊子只差一個字母,所以Mosquitto的標誌中間帶有一個尖刺)是非營利軟體供應商聯盟Eclipse基金會的開源物聯網專案計畫(iot.eclipse.org)中的一環,支援MQTT 3.1和3.1.1版通訊協定,可在Windows, macOS和Linux等作業系統上安裝執行。適用於Windows系統的安裝程式,可直接從Mosquitto官網下載(mosquitto.org/download),請選擇“Native build”(原生編譯版):
下載之後直接雙按它進行安裝。在安裝過程中,安裝程式會提示需要額外下載OpenSSL和pthreads程式元件:
請按下Next(下一步)繼續安裝,最後,螢幕上將出現如下的兩個錯誤訊息,告訴我們因為缺乏必要的.DLL元件,Mosquitto伺服器無法啟動。
下載與安裝Mosquitto所需的元件
請下載pthreads裡的pthreadVC2.dll元件:
接著下載Win32_OpenSSL_v1.0.2k_Light,32位元版本的OpenSSL安裝程式並執行它。
底下是OpenSSL的數個安裝步驟畫面之一,為了方便複製DLL檔,請選擇第二個選項,將OpenSSL的二進制檔(以及.DLL檔)存放到/bin資料夾(第一個選項是「存入系統資料夾」)。
這是OpenSSL最後一個安裝畫面,詢問你要捐助多少美金,如果目前尚未準備捐款,請取消勾選並按下Finish(完成)鈕。
選取OpenSSL安裝路徑(預設為C:\OpenSSL-Win32)的bin資料夾裡的libeay32.dll和ssleay32.dll:
把它們連同之前下載的pthreadVC2.dll元件,全都複製到Mosquitto安裝資料夾(預設路徑是C:\Program Files (x86)\mosquitto)。
重新安裝Mosquitto,就能順利安裝成功。
啟動Mosquitto伺服器
在Windows的「服務」或者「工作管理員」的「服務」項目中,找到mosquitto服務,然後在它的「狀態」欄位按滑鼠右鍵,選擇「啟動」。
若要確認Mosquitto伺服器是否在運作狀態。可在「命令提示字元」視窗中執行netstat -an,列舉目前作用中的連線。Mosquitto服務預設運作於1883埠,因此我們也可以執行netstat -an|find “1883”,確認Mosquitto伺服器目前正在執行中:
開通防火牆埠號1883
Windows的防火牆預設沒有開通1883埠號,因此本機電腦以外的MQTT裝置無法和Mosquitto伺服器連線。
設定Windows防火牆,允許外部裝置透過1883埠連入本機電腦的步驟如下:
1. 按下Windows防火牆設定面板左下角的「進階設定」,開啟「具有進階安全性的Windows防火牆」面板:
2. 底下畫面顯示所有可連入(輸入)和連出(輸出)本機的安全規則設定。請按右上角的「新增規則」,準備新增一個1883埠號的輸入規則。
3. 在「新增輸入規則精靈」的第一個設定選項,選擇「連接埠」,再按「下一步」。
4. 選擇“TCP”並指定1883連接埠。
5. 選擇「允許連線」。
6. 套用此規則的時機,可全部勾選,至少勾選前面兩項。
7. 最後,替此規則設定一個名稱和說明。
延伸閱讀
- MQTT教學(一):認識MQTT
- HiveMQ公司的MQTT Essentials系列文件
請問如果有勾選公用就能從外網發布資料給broker了嗎??
不,那個選項代表:當你的電腦連接到「餐廳」之類的「公用網路」。是否讓外網存取,要從網路分享器(路由器)設定。
thanks,
jeffrey
請問關於一些設定與功能上的問題:
我有什麼辦法可以知道
1.目前Client連線的清單嗎?
2.Mosquitto 有支援cache功能嗎?例如保留最後一筆訊息
3.我看文件好像可以有權限的方式來管理Client是可以搭配MySql DB來管理嗎?
應該沒有前面兩項功能,你提到的管理client,應該是指mosquitto-auth-plugin,從專案網頁的說明和範例看來,它支援各種用戶驗證的功能,包含MySQL和MongoDB,但是這個外掛無法將MQTT訊息存入資料庫喔~
thanks,
jeffrey
老師好,我依上述步驟安裝,可是最後出現\”程式碼執行無法繼續,因為找不到MSVCR120.dll,重新安裝程式或許可以修正此問題\”,請問該如何解決?謝謝
根據這個網頁的說明,請嘗試下載安裝「適用於 Visual Studio 2013 的 Visual C++ 可轉散發套件」。
thanks,
jeffrey
開通防火牆埠號1883
Windows的防火牆預設沒有開通”188″埠號,因此本機電腦以外的MQTT裝置無法和Mosquitto伺服器連線。
這裡應該是 開通”1883″埠號
感謝糾錯!內文已更正。
thanks,
jeffrey
mosquitto 安裝最後跳出”應用程式無法正確啟動(0xc000007b)” ,系統是W10 64-bit,是不是不支援? 謝謝!
我也是用Win10-64bit,執行無誤。
thanks,
jeffrey
我看了這篇可以安裝成功了,https://www.dll-files.com/download/419cbc91b0847e3d1457aa5af6847b8c/vcruntime140.dll.html?c=UUhQZVE0SHpJUTZ5dzhNTG50Z0VYQT09
感謝告知!我的電腦有安裝Visual Studio開發工具,所以沒有缺少那個.dll檔的問題。
thanks,
jeffrey
版主您好,我目前遇到問題是 PC上MQTT端顯示連線成功,期望運用wifi與ESP8266做溝通,ESP8266端顯示有連線到wifi,但是無法連到MQTT,(ESP部分輸入之IP位置與個人PC尚MQTT之IP位置一致),想問版主能否提供解決方向。
請問你有測試過連接雲端平台,如ThingSpeak的MQTT服務嗎?
thanks,
jeffrey
Eclipse downloads – file unavailable
無法下載 Windows 版本 …
有人可以提供嗎…
版主您好:想請問一下 MQTT要怎麼從不同網域下client與broker連線
請參閱這一篇回應說明。
thanks,
jeffrey
老師,您好
請問您Broker若要提供外部subscriber時是否要也開啟輸出port
此外,我在啟動mosquitto後,內部subscriber可正常連線,但是當啟動publisher後subscriber就無法連上broker,請問老師這是設定上的問題嗎?謝謝老師
請問你有啟用IP分享器的DMZ或虛擬伺服器嗎?
若在本機電腦設置HTTP伺服器,外網也連能連入嗎?
thanks,
jeffrey
請問ftp頁面的使用者帳號密碼是什麼
我目前的電腦沒有安裝Mosquitto,改天試試。
thanks,
jeffrey
我在裝2.0.7時它跟我說要遠端連接需要設定config檔,但當我改安裝1.6.x時,按照上面的試範又可以順利連上,這不要改config檔的哪裏,才可以順利連上??
請問新版的2.0.7該如何設定再可以讓遠端連線,我用127.0.0.1 連時可以連上,但若連裝broker的NB的IP時就連不上。我試著灌上1.6.X就可以順利連上,並不用額外設定,請問這是什原因?
我沒裝過2.0.7版,也許本週內會試試。
thanks,
jeffrey
剛才安裝了Mosquitto 2.0.8,在Windows命令提示字元的執行mosquitto -v的畫面如下:
它提示預設只能接受本機的連線。要啟用驗證和其他設定,需要修改mosquitto.conf設置檔,這個設置檔內容預設都被註解掉了,詳細說明請參閱mosquitto.org的這份設置說明文件…我下週再處理。
thanks,
jeffrey
要如何找出MQTT Client的ID
請參閱這篇貼文的「PubSubClient程式庫提供的函式指令介紹」單元。
安裝mosquitto後, C:\Users\SHIN>mosquitto.exe -v 1644585367: mosquitto version 2.0.5 starting 1644585367: Using default config. 1644585367: Starting in local only mode. Connections will only be possible from clients running on this machine. 1644585367: Create a configuration file which defines a listener to allow remote access. 1644585367: Opening ipv4 listen socket on port 1883. 1644585367: Error: 一次只能用一個通訊端位址 (通訊協定/網路位址/連接埠)。 1644585367: Opening ipv6 listen socket on port 1883. 1644585367: Error: 一次只能用一個通訊端位址 (通訊協定/網路位址/連接埠)。 請問這是何問題呢?
因為Windows「服務」已經啟動mosquitto,它佔用了1883埠口,你若要手動執行mosquitto,必須先關閉「mosquitto服務」。
您好~我剛下載的版本是mosquitto-2.0.15-install-windows-x64.exe 沒有看到任何要額外下載的套件 但在工作管理員也沒有看到mosquitto正在運行 不曉得這樣情況該如何處理? 是沒有下載完全嗎? 謝謝您
剛剛測試安裝mosquitto-2.0.15-install-windows-x64.exe,有看到mosquitto服務: