簡介
mqtt:一種通信協議,類似人類交談中的漢語、英語、俄語中的一種語言規范
MQ:一種訊息佇列,也叫通信通道,類似人類交談中的用電話、email、微信的一種通信方式
json:一種內容格式,就是資料打包的格式,
市面上的MQ產品很多,如阿里自研并開源RocketMQ,還有類似RabbitMQ、**ActiveMQ,**他們不管支持MQTT協議,還支持如AMQP、stomp協議等等,EMQ 使用的協議是mqtt,
只需要看本地MQTT服務器怎么配置的,目錄里的二就夠了,
到時候要用還是得部署到云MQTT服務器中,
文章目錄
- 簡介
- 前言
- 一、MQTT簡介
- 1.MQTT控制報文格式
- 1.1 固定報頭 Fixed header
- 1.1.1 MQTT控制報文的型別 MQTT Control Packet type
- 1.1.2 標志 Flags
- 1.1.3 剩余長度 Remaining Length
- 1.2 可變報頭 Variable header
- 1.3 有效載荷 Payload
- 2 抓包測驗
- 2.1 connect
- 2.2 disconnect
- 2.3 subscribe
- 2.4 pubulish
- 2.5 ping request (心跳幀)
- 2.6 ping response (心跳幀)
- 二、建立本地MQTT服務器(Broker)
- 1.引入Apollo & ActiveMQ
- 2.ActiveMQ的安裝與配置
- 2.1首先安裝并配置JDK,
- 2.2activemq安裝配置
- 2.3 activemq 的啟動與訪問
- 總結
- 參考
前言
提示:這里可以添加本文要記錄的大概內容:
例如:隨著人工智能的不斷發展,機器學習這門技術也越來越重要,很多人都開啟了學習機器學習,本文就介紹了機器學習的基礎內容,
提示:以下是本篇文章正文內容,下面案例可供參考
一、MQTT簡介
MQTT(Message Queuing Telemetry Transport,訊息佇列遙測傳輸協議),是一種基于發布/訂閱(publish/subscribe)模式的"輕量級"通訊協議,該協議構建于TCP/IP協議上,由IBM在1999年發布,MQTT最大優點在于,可以以極少的代碼和有限的帶寬,為連接遠程設備提供實時可靠的訊息服務, 作為一種低開銷、低帶寬占用的即時通訊協議,使其在物聯網、小型設備、移動應用等方面有較廣泛的應用,
場景:機器與機器(M2M)通信和物聯網(IoT),其在,通過衛星鏈路通信傳感器、偶爾撥號的醫療設備、智能家居、及一些小型化設備中已廣泛使用,
1.MQTT控制報文格式
MQTT控制報文由下面三部分組成:

1.1 固定報頭 Fixed header
如下圖所示,每個MQTT控制報文都包含一個固定報頭,

1.1.1 MQTT控制報文的型別 MQTT Control Packet type

1.1.2 標志 Flags

1.1.3 剩余長度 Remaining Length
位置: 從第2個位元組開始, 最長可達4位元組,根據最高位判斷后面位元組是不是剩余長度,所以 4位元組長度最大可以表示128128128*128Byte=256MB,
剩余長度(Remaining Length)是一個變長位元組整數,用來表示當前控制報文剩余部分的位元組數,包括可變報頭和負載的資料,剩余長度不包括用于編碼剩余長度欄位本身的位元組數,MQTT控制報文總長度等于固定報頭的長度加上剩余長度,
1.2 可變報頭 Variable header
某些 MQTT 控制報文包含一個可變報頭部分,它在固定報頭和有效載荷之間,可變報頭的內容根據報文型別的不同而不同,可變報頭的報文識別符號(Packet Identifier)欄位存在于在多個型別的報文里,
不多贅述
1.3 有效載荷 Payload
內容過多,詳見下:
MQTT Version 3.1.1
2 抓包測驗
只要能發送下面的報文,其實就夠了,
連接;斷連;訂閱;發布;心跳幀,
2.1 connect

2.2 disconnect

2.3 subscribe

2.4 pubulish

2.5 ping request (心跳幀)

2.6 ping response (心跳幀)

二、建立本地MQTT服務器(Broker)
1.引入Apollo & ActiveMQ
Apollo已經沒有了,網站上只能下載到ActiveMQ了,無所謂的,反正都是用,
ActiveMQ官網
Apache ActiveMQ是Apache軟體基金會所研發的開放源代碼訊息中間件;由于ActiveMQ是一個純Java程式,因此只需要作業系統支持Java虛擬機,ActiveMQ便可執行,
2.ActiveMQ的安裝與配置
2.1首先安裝并配置JDK,
Ubuntu安裝JDK
下載 => 解壓 =>配置環境變數 =>使環境變數生效 =>查看java版本
2.2activemq安裝配置
ubuntu下activeMQ安裝與配置
下載 => 解壓 =>運行 =>檢查
2.3 activemq 的啟動與訪問
啟動:bin檔案目錄下 ./activemq start

關閉: bin檔案目錄下 ./activemq stop
訪問web端:
http://localhost:8161/admin/
or
http://127.0.0.1:8161/admin/
建立連接:
查找mqtt服務器IP與埠:

連接服務器:服務器IP就是你ACtivemq 安裝的主機的IP
我這邊是安裝再虛擬機里的ubuntu里了,于是就是192.168.1.62:1883
埠號可以打開cfig檔案夾中的activemq.xml來看,
里面有講到各個協議走的埠號是什么,我們用到了MQTT 就看MQTT那一行就行,


用通信貓輸入Ip:port 即可

ID可以隨便填,除非ID沖突了;因為服務器沒有對客戶端做限制,所以賬號密碼可以隨便填,
如果想試一下兩個客戶端中訂閱/發布的程序,就開兩個界面來試一下,

這會應該換個ID,因為服務器中id是唯一索引,不能沖突,
如上圖所示,兩個客戶端都連接到服務器,根據對方訂閱的主題,發布訊息,訂閱方就會收到訊息,
至此,MQTT本地的服務器端與客戶端連接就介紹完了,后面估計會記錄一下自己的客戶端該怎么做,
真的要使用還是需要服務器掛到成熟的云MQTT服務器上,
總結
MQTT是個很方便的協議,開發階段可以省時省力,
所以需要完整實作MQTT嗎,簡單的應用是不是只需要完成上面抓包的資料報就行,能夠簡化實作,
就像下面鏈接實作的,
基于STM32實作MQTT
參考
ubuntu下activeMQ安裝與配置
Ubuntu16.04配置ActiveMQ
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282367.html
標籤:其他
