初始mqtt服務

MQTT入門

概念

mqtt意爲消息隊列遙測傳輸,是IBM開發的一個即時通信協議。因爲其維護一個長鏈接以輕量級低消耗著稱,因此經常使用於移動端消息推送服務開發。vim

協議格式

mqtt協議控制報文的格式包含三部分:
以固定報頭、可變報頭和有效載荷,其中固定報文頭是全部控制報文都有的,可變報頭和有效載荷都是部分控制報文。
mqtt是二進制的協議,控制字段是精確到Bit級別的,單純這一點就足覺得其在物聯網領域佔據一席之地。mqtt是不支持分包等機制,並不適宜一些數據包特別大的應用場景。緩存

mqtt特性

  • 使用發佈/訂閱消息模式,提供一對多消息發佈;
  • 對負載內容屏蔽的消息傳輸;
  • 使用TCP/IP進行網絡鏈接;
  • 具備三種消息發佈服務質量選項:
  • 1."至多一次",一般app的推送使用的是這種模式,也就是說,若是移動設備在消息推送的時候沒有聯網,那麼再次聯網就不會收到通知了;
  • 2."至少一次",能夠確保消息收到,但消息可能會重複;
  • 3."只有一次",確保消息到達一次,好比計費系統,若是出現消息重複或者丟失會致使系統結果不正確的問題。
  • 小型傳輸,開銷很小,協議交換最小化,以下降網絡流量;
  • 通知有關各方客戶端異常中斷的機制。

mqtt協議實現方式

發佈者----發佈消息---->代理-------推送消息----->訂閱者
發佈者----發佈消息---->代理<------訂閱消息-----訂閱者

在mqtt協議中有三種身份:服務器

  • 發佈者(publish):發佈者是客戶端,能夠進行發佈消息
  • 代理(broker):代理指的是服務器,比較有名的是emqtt,當前能夠其餘成熟的框架去搭建mqtt服務
  • 訂閱者(subscribe):指的客戶端,不過發佈者同時也能夠是訂閱者。

mqtt服務端和客戶端實現的功能

mqtt服務端
  • 接受來自客戶端的網絡鏈接;
  • 接受客戶發佈的應用信息;
  • 處理來自客戶端主題訂閱和退訂請求;
  • 向訂閱的客戶端轉發應用程序消息網絡

    mqtt客戶端
  • 給其餘客戶端發佈訂閱的消息;
  • 訂閱其餘客戶端發佈的消息;
  • 退訂和訂閱主題;
  • 斷開服務器鏈接併發

mqtt協議中的方法

  • connect:等待服務器創建鏈接;
  • disconnect:等待客戶端完成所作的工做,並與服務器斷開TCP/IP會話;
  • subscribe:主題訂閱;
  • unsubscribe:主題取消訂閱;
  • publish:發送消息

mqtt的安裝

# sudo yum install epel-release
# sudo yum install mosquitto mosquitto-clients
# sudo systemctl start mosquitto
mqtt默認是以1883端口運行的

mqtt簡單使用

mosquitto的配置文件爲/etc/mosquitto/mosquitto.conf/
1.添加密碼配置而且不容許匿名用戶登陸
# sudo vim /etc/mosquitto/mosquitto.conf
allow_anonymous false  #不容許匿名登陸
password_file /etc/mosquitto/pwfile  #配置用戶密碼文件
acl_file /etc/mosquitto/aclfile  # 配置topic和用戶

2.添加用戶信息
# mosquitto_passwd -c /etc/mosquitto/pwfile ceshi
# mosquitto_passwd /etc/mosquitto/pwfile ceshi2
分別添加用戶ceshi和ceshi2

3.添加topic和用戶的關係(權限配置)
# sudo vim /etc/mosquitto/aclfile
# ceshi只能發佈V222爲前綴的主題,訂閱V333開頭的主題
user ceshi
topic write V222/#
topic read V333/#
# ceshi2只能訂閱以V222爲前綴的主題
user ceshi2
topic read V222/#

- write:發佈訂閱
- read:接受訂閱

4.啓動
-c :指定配置文件啓動
-d: 後臺運行
mosquitto -c /etc/mosquitto/mosquitto.conf -d 

5.測試
發佈訂閱:mosquitto_pub
接受訂閱:mosquitto_sub
參數:
-h :服務器主機
-t :指定主題
-u :用戶名
-P : 密碼
-i :客戶端id
-m :發佈的消息內容

# mosquitto_sub -h localhost -t "V222" -u ceshi2 -P 123456

# mosquitto_pub -h localhost -t "V222" -m "Hello world" -u ceshi -P 123455
配置文件解析
# 系統狀態的刷新時間
# sys_interval 10

# 系統資源的回收時間,0表示儘快處理
# store_clean_interval 10

# 服務進程的pid
# pid_file /var/run/mosquitto.pid

# 服務進程的系統用戶
# user mosquitto

#  客戶端心跳消息的最大併發數
# max_inflight_messages 10

# 客戶端心跳消息緩存隊列
# max_queued_messages 100

# 用於設置客戶端長鏈接的過時時間,默認永不過時
# persistent_client_expiration

# 服務綁定的IP地址
# bind_address

# 服務綁定的端口
# port 1883

# 消息自動保存的間隔時間
# autosave_interval 1800

# 消息自動保存功能的開關
# autosave_on_changes false

# 持久化功能的開關
# persistence true

# 持久化DB文件
# persistence_file mosquitto.db

# 持久化DB文件目錄
# persistence_location /var/lib/mosquitto/

# 4種日誌模式: stdout、stderr、syslog、topic
# none:則表示不記錄日誌
log_dest none
# 選擇日誌的級別
# log_type error
# log_type warning
# log_type notice
# log_type information

# 是否記錄客戶端鏈接信息
# connection_messages true

# 是否記錄日誌時間
# log_timestamp true

# 容許匿名用戶
# allow_anonymous false

# 用戶/密碼文件,默認格式爲:user/passwd
# password_file /etc/mosquitto/passwd
相關文章
相關標籤/搜索