MQTT – 4. MQTT Broker

MQTT broker

Broker 幾乎都是 Erlang 的天下

後續考量 MySQL 身份認證、SSL、平台支援、ACL 訂閱限制,最後選擇 EMQ X

EMQ X

不得不說,大陸的軟體就是好用,設想的較為周全,文件也齊全,平台支援性也完整

CentOS 7

Ubuntu 20

VerneMQ

CentOS 7

下載安裝後不要傻傻的按照官方的說法直接啟動服務,那是不會成功的,還要先設定設定檔才行

Ubuntu 20 – Docker

使用 dpkg 安裝 deb ,出現 libss 版本不符錯誤,目前找不到解決方法,改採 Docker 方式使用

使用 netstat 查詢轉址無法判斷,直接測試使用即可

開機啟動

Dockerfile

  • 啟動自動執行 /usr/sbin/start_vernemq

start_vernemq

Eclipse Mosquitto

Ubuntu 20

需要重新安裝設定檔可以使用

RabbitMQ

MQTT 在 RabbitMQ 只是其中一個 Plugin,不會用

Ubuntu 20

Mosquitto MySQL plugin 安裝

最後編譯失敗,不會用

22 total views, 6 views today

Fail2ban

參考資源

安裝

Ununtu

CentOS 7

系統服務

例如要控管 ssh 可以這樣設定

編輯 jail.conf

設定 sshd 區段

將 fail2ban 服務開啟及啟動

解除單一 IP 封鎖

解除全部封鎖

維護

查看有作用

查看作用執行細節

自訂服務應用 – 以網頁登入為例

如果其他應用也要套用,例如網頁登入,那就要多費點功夫

需要自訂規則建議先使用 fail2ban-regex 指令進行模擬,如此決定 log 格式以及正規式規則

log 至少需要包含 IP 以及時間,時間最好包含時區,例如

使用 fail2ban-regex 驗證正規式是否可抓取 log 資料格式

編輯過濾規則設定檔

datepattern 的百分比符號在設定檔內是連續 2 個

編輯 jail.local

再次使用 fail2ban-regex 驗證,這次使用檔案驗證

8 total views, no views today

MQTT – 0. 如果不是為了破壞地球,我也不會開始用

緣由

因為 班班有冷氣 加上台電要限制尖峰用電,需要配套需量反應的卸載機制,和上層的通訊一開始定義了 MQTT 所以才開始了解 (要不然要使用 Socket 到死的)

簡介

30 total views, 2 views today

MQTT – 2. 其他客戶端

參考

PHP Publish

PHP 的應用場景可能發生在需要從網頁發出 publish 控制需求,Hoyo 尚未在 PHP 上撰寫常駐程式

安裝,跳過 PHP 版本需求

程式範例

CLI

CLI 執行方式除了可以滿足單機執行外,讓 PHP 直接呼叫執行應該是更佳的方式,尤其是剛剛上述的 PHP Publish 效能不彰的情況

因為加上了 MySQL 認證

完整範例

  • -h host
  • -p port
  • -u 使用者帳號
  • -P 使用者密碼
  • –cafile SSL CA 證書檔案路徑
  • –cert SSL 證書檔案路徑
  • –key SSL Key 檔案路徑
  • -t Topic
  • -m Message

13 total views, no views today

MQTT – 1. 使用免費公開的 MQTT Broker Server 學習如何訂閱、發行(收發資料)

節錄: MQTT 客户端库

公開 MQTT Borker

建議選擇 broker.emqx.io ,因為支援 WebSocket 可以從資料收集端直接呈現到網頁,不需要經過資料庫這類儲存媒介。實際應用也是 EMQ X Broker 才符合需求,學校專題或是個人嘗鮮可以使用 mosquitto 即可

程式參考

以下 Python 範例程式已經根據可用 MQTT Broker 修改

程式先訂閱 house/bulb1 主題,然後發行 house/bulb1 此主題及內容

運作結果

Topic 萬用字元

#

+

Socket VS MQTT

  • MQTT 要接收的資料必須自己訂閱,少了多了都有問題,Socket 要自己處理資料流
  • 傳送時斷線 Socket 就是失敗,MQTT 根據 QoS 政策可以保證資料的送達。當 QoS 為 0 時,短暫的斷線 (拔網路線10秒) 也能成功送達
  • 主機端須處理的程式 Socket 可以寫在 Workerman 內,MQTT 因為 Server 只是代理,所以程式必須分開,以健康度來說 MQTT 較佳;Socket 程式一致性及即時性較佳

25 total views, 1 views today