當前位置:首頁 » 雲伺服器 » 搭建分布式mqtt伺服器

搭建分布式mqtt伺服器

發布時間: 2023-04-01 01:48:54

A. 三、NT35E標准MQTT

      用戶在使用CAT1模組MQTT協議對接自己的伺服器,有時會遇到設備無法連接伺服器問題(比如提示+ECMTCON:0,0,5連接伺服器被拒絕,認證失敗)。此時可以通過 標準的MQTT伺服器 進行對比,因為用戶自己的伺服器一般加入校驗信息,導致模組&MQTT伺服器無法連接。

       Eclipse Mosquitto是一個開源消息代理,實現了MQTT協議版本3.1和3.1.1,這里使用該伺服器進行測試。針對該伺服器更詳細的介紹也可以參考 https://www.jianshu.com/p/b6a75bfbe82f 。

       MQTT有個重要的參數QOS,因下面使用較多,這里列出便於後續查看:

AT+ECMTOPEN=<tcpconnectID>,「<host_name>」,<port>

<tcpconnectID> 整型。 MQTT Socket 標識符。范圍: 0~4

<host_name>  IP 地址或域名

<port> 整型。伺服器埠

示例:AT+ECMTOPEN=0, "test.mosquitto.org",1883   //建立 tcp

返回值:+ECMTOPEN:<tcpconnectID>,<result> 

<tcpconnectID> Integer type,MQTT socket identifier. The value is 0

<result> 1 Failed to open network,0 Opened network successfully

AT+ECMTCONN=<tcpconnectID>,「<clientID>」[,「<username>」[,「<password>」]]

<tcpconnectID> MQTT socket identifier. The value is 0

「<clientID>」 用戶不指定標准伺服器會自行創建

「<username>」,「<password>」 標准MQTT伺服器不使用

示例:AT+ECMTCONN=0   //在 mosquitto 平台上注冊設備

返回值:+ECMTCONN:<tcpconnectID>,<result>[,<ret_code>]

AT+ECMTSUB=<tcpconnectID>,<msgID>,「<topic>」,<qos>

<tcpconnectID> MQTT socket identifier. The value is 0

<msgID> 任意填寫,Message identifier of packet. The range is 1-65535

<topic> String type,Topic that the client wants to subscribe to or unsubscribe from.

<qos> Message QoS, can be 0,1 or 2

示例:AT+ECMTSUB=0,1,」test」,2 //訂閱 topic

返回值:+ECMTSUB:<tcpconnectID>,<msgID>,<result>[,<value>]

額外指令:AT+ECMTUNS=0,4, 「test」 //取消訂閱 topic

AT+ECMTPUB=<tcpconnectID>,<msgID>,<qos>,<retain>,「<topic>」,「<payload>"

<tcpconnectID> MQTT socket identifier. The value is 0

<msgID> Message identifier of packet.

<qos> Message QoS, can be 0,1 or 2

<retain> 0 Server should not retain the message   1 Server should retain the message

<topic> String type

<payload> String type

示例:AT+ECMTPUB=0,0,0,0,"test","hello" //發送數據給 mosquitto 平台

+ECMTPUB:<tcpconnectID>,<msgID>,<result>[,<value>]

額外指令:AT+ECMTDISC=0  //刪除 mqtt client 和 mqtt 連接

B. 海為物聯雲HMI如何設置MQTT

首先需要搭建MQTT伺服器,然後搭建MySQL資料庫,然後使用海為組態寫段程序,最後配置客戶端驗證即可。具體可以參考內容 Haiwell(海為)HMI/CBOX/IPC MQTT 配置應用教程網頁鏈接

C. springboot整合RabbitMQ Mqtt

第一,pom配置,我們需要引入相關jar:

第二,配置MQTT伺服器基本信息,在springBoot配置文件application.properties中配置,添加如下:

第三,配置MQTT消息推送配置類,

第四,配置MqttGateway消息推送介面類,在sendToMqtt(String data,@Header(MqttHeaders.TOPIC)String topic)介面中,data為發送的消息內容,topic為主題。指定topic,則我們的介面可以根據需要,向不同的主題發送消息,方便靈活應用。如果不指定,則使用默認配置的主題。

第五,介面類測試下功能,用Postman調用sendMqtt.do介面,往hello主題發送消息,用MQTTLens訂閱hello主題,從下面截圖,可以看出可以正常往MQTT服務發送消息了,而且可以訂閱到。

D. php安裝mqtt擴展【Mosquitto】

沒有安裝mosquitto的可以看一下鏈接先安裝一下

MQTT伺服器搭建-mosquitto1.4.4安裝指南

然後我們來安裝php擴展

如果你已經使用預先建立的軟體包來安裝Mosquitto,你需要確保你已經安裝了開發頭文件。在紅帽派生的系統上,這可能是叫做libmosquitto-devel,在基於 Debian的系統上叫做libmosquitto-dev。

你可以使用pecl來來安裝這個拓展包:

pecl install Mosquitto-alpha

1

或者,你也可以使用常規的安裝拓展的方法來安裝:

phpize

./configure --with-mosquitto=/path/to/libmosquitto

make

make install

1

2

3

4

然後添加extension=mosquitto.so到你的PHP配置文件php.ini中。

--with-mosquitto

1

是可選參數,只有當安裝程序找不到libmosquitto拓展包,才需要添加這個參數

E. 在雲伺服器上搭建了mqtt,為什麼手機連接不上mqtt,要怎麼做才能連接上求求大神幫忙

MQTT協議是廣泛應用的物聯網協議,使用測試MQTT協議需要MQTT的代理。有兩種方法使用MQTT服務,一是租用現成的MQTT伺服器,如阿里雲,網路雲,華為雲等公用的雲平台提供的MQTT服務,使用公用的MQTT伺服器的好處是省事,但如果僅僅用於測試學習還需要注冊帳號,靈活性差些,有的平台還需要付費。另一方法是自己使用開源的MQTT組件來搭建。
MQTT伺服器非常多,如apache的ActiveMQ,emtqqd,HiveMQ,Emitter,Mosquitto,Moquette等等。
這里介紹的是用輕量級的mosquitto開源項目來搭建一個屬於自己的MQTT伺服器。
第一步:需要安裝一台linux主機,這不多介紹,可以使用真機安裝也可以使用虛擬機安裝。如果僅僅是自己測試使用都可以。
第二步:下載mosquitto需要的依賴
sudo apt-get install libssl-devsudo apt-get install uuid-devsudo apt-get install cmake

第三步:下載mosquitto並解壓,現在mosquitto官網最新的版本是1.5.1
tar xzvf mosquitto-1.5.1.tar.gz
第四步:編譯
cd mosquitto-1.5.1/
make
make install
第五步:啟動mosquitto
./mosquitto -v
1535473957: mosquitto version 1.5.1 starting
1535473957: Using default config.
1535473957: Opening ipv4 listen socket on port 1883.
1535473957: Opening ipv6 listen socket on port 1883.
這時候mosquitto就會以默認的參數啟動。如果需要帶配置文件可以修改配置文件mosquitto.conf,
啟動時候加上參數 -c,
./mosquitto -c mosquitto.conf
可以看到,mosquitto監聽的埠為1883.
這時候我們的MQTT伺服器就搭建好了。可找一個mqtt客戶端來測試一下。
先發布一個主題「home/garden/fountain/2」
內容是「hello world」
這時候在mosquitto會列印出下面的log
535474247: New connection from 192.168.1.105 on port 1883.
1535474247: New client connected from 192.168.1.105 as MQTT_FX_Client (c1, k60).
1535474247: No will message specified.
1535474247: Sending CONNACK to MQTT_FX_Client (0, 0)
1535474307: Received PINGREQ from MQTT_FX_Client
1535474307: Sending PINGRESP to MQTT_FX_Client
1535474339: Received PUBLISH from MQTT_FX_Client (d0, q0, r0, m0, 'home/garden/fountain/2', ... (12 bytes))
1535474367: Received PINGREQ from MQTT_FX_Client
1535474367: Sending PINGRESP to MQTT_FX_Client

訂閱主題「home/garden/fountain/2」

可以看到收到了自己發布的消息。
用wireshark抓包
可以看到抓到了一個MQTT的publish的報文。

F. MQTT簡單介紹

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協議),是一種基於發布/訂閱模式的"輕量級"通訊協議,該協議構建於TCP/IP協議上。好比你給好友發送一封電子郵件,發送完成後你可以去做別的事情,收件人也不必立刻響應,可以在自己有空的時候查看郵件,是一個典型的非同步發布/訂閱場景。而另一種典型的同步請求/回答場景,可以用接打電話的場景來類比。

MQTT的設計遵循以下的原則:

為了滿足不同的場景,MQTT支持三種不同級別的服務質量(Quality of Service,QoS)為不同場景提供消息可靠性:

MQTT擁有14種不同的消息類型:

實現MQTT協議需要客戶端和伺服器端通訊完成,在通訊過程中,MQTT協議中有三種身份:發布者(Publish)、代理(Broker)(伺服器)、訂閱者(Subscribe)。其中,消息的發布者和訂閱者都是客戶端,消息代理是伺服器,消息發布者可以同時是訂閱者。

MQTT傳輸的消息分為:主題(Topic)和負載(payload)兩部分:

MQTT會構建底層網路傳輸:它將建立客戶端到伺服器的連接,提供兩者之間的一個有序的、無損的、基於位元組流的雙向傳輸。

當應用數據通過MQTT網路發送時,MQTT會把與之相關的服務質量(QoS)和主題名(Topic)相關連。

一個使用MQTT協議的應用程序或者設備,它總是建立到伺服器的網路連接。客戶端可以:

MQTT伺服器以稱為"消息代理"(Broker),可以是一個應用程序或一台設備。它是位於消息發布者和訂閱者之間,它可以:

訂閱包含主題篩選器(Topic Filter)和最大服務質量(QoS)。訂閱會與一個會話(Session)關聯。一個會話可以包含多個訂閱。每一個會話中的每個訂閱都有一個不同的主題篩選器。

每個客戶端與伺服器建立連接後就是一個會話,客戶端和伺服器之間有狀態交互。會話存在於一個網路之間,也可能在客戶端和伺服器之間跨越多個連續的網路連接。

連接到一個應用程序消息的標簽,該標簽與伺服器的訂閱相匹配。伺服器會將消息發送給訂閱所匹配標簽的每個客戶端。

一個對主題名通配符篩選器,在訂閱表達式中使用,表示訂閱所匹配到的多個主題。

消息訂閱者所具體接收的內容。

MQTT協議中定義了一些方法(也被稱為動作),來於表示對確定資源所進行操作。這個資源可以代表預先存在的數據或動態生成數據,這取決於伺服器的實現。通常來說,資源指伺服器上的文件或輸出。主要方法有:

G. mqtt 伺服器搭建需要用到java

最近公司做的項目中有用到消息推送,經過多方面的篩選之後確定了使用MQTT協議,相對於XMPP,MQTT更加輕量級,並且佔用用戶很少的帶寬。
MQTT是IBM推出的一種針對移動終端設備的基於TCP/IP的發布/預訂協議,可以連接大量的遠程感測器和控制設備。
MQTT的官網見:http://mqtt.org/。其中http://mqtt.org/software裡面提供了官方推薦的各種伺服器和客戶端使用的各種語言版本的API。
下面以伺服器Apollo 1.6為例,之前嘗試過使用ActiveMQ,效果很不理想,只能實現伺服器和客戶端一對一的通信,從官網上了解到Apollo屬於activemq的一個子工程。先不管這些了,言歸正傳,以下在windows環境下。
1、在這里下載Apollo伺服器,下載後解壓,然後運行apache-apollo-1.6\bin\apollo.cmd,輸入create mybroker(名字任意取,這里是根據官網介紹的來取的)創建伺服器實例,伺服器實例包含了所有的配置,運行時數據等,並且和一個伺服器進程關聯。
2、create mybroker之後會在bin目錄下生成mybroker文件夾,裡麵包含有很多信息,其中etc\apollo.xml文件下是配置伺服器信息的文件,etc\users.properties文件包含連接MQTT伺服器時用到的用戶名和密碼,後面會介紹,可以修改原始的admin=password,可以接著換行添加新的用戶名密碼。
3、打開cmd,運行…apache-apollo-1.6\bin\mybroker\bin\apollo-broker.cmd run 開啟伺服器,可以在瀏覽器中輸入http://127.0.0.1:61680/查看是否安裝成功,該界面展示了topic,連接數等很多信息。
經過上面的簡單步驟,伺服器基本上就已經完成,下一篇將介紹Android客戶端的編寫和注意事項。
客戶端使用的API,開始我使用的是mqtt-client,使用過後發現問題百出,不能很好的滿足要求,後來使用了官方推薦的Eclipse Paho,下面開始客戶端代碼的編寫,為了方便測試這里有android和j2se兩個工程:
1、新建android工程MQTTClient
2、MainActivity代碼如下:

H. Android 中使用MQTT(第一篇)

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸)是IBM開發的一個即時通訊協議。它是一種發布/訂閱,極其簡單和輕量級的消息傳遞協議,專為受限設備和低帶寬,高延遲或不可靠的網路而設計。它的設計思想是輕巧、開放、簡單、規范,易於實現。這些特點使得它對很多場景來說都是很好的選擇,特別是對於受限的環境如機器與機器的通信(M2M)以及物聯網環境。相對於XMPP,MQTT更加輕量級,並且佔用的寬頻低。

MQTT協議有以下特點:

那麼問題來了?重連連接成功後重復接收到最後一條消息
MQTT推送消息訂閱端重復接收問題。
(背景)訂閱端斷開的時候,發布端多次推送消息。
(現象)訂閱端啟動時,接收到最後一條推送消息有兩次;即使Qos設置為2;依然是兩次。
經排查是因為
MqttMessage的Retained設置為了true;
該值很多文章上只說了是 消息保留機制,若設置為true,mqtt伺服器會保留每次發布的消息;較少提到 若訂閱某主題的客戶端重啟,則會把此主題之前發布的消息重新推送到客戶端。該值默認為false;去掉修改該值即可
那麼問題來了?重連連接後手動那麼多遺漏的消息,怎麼選擇只接收最新的一條消息呢?
MQTT推送消息訂閱端重復接收問題。
(背景)訂閱端斷開的時候,發布端多次推送消息。
(現象)訂閱端啟動時,接收到msg1,msg2,msg3 (這三個消息都是同一個類型消息,只需要處理最新的msg3就好,不然界面會刷新三次)這個誰有什麼好辦法沒呢?

GitHub地址: https://github.com/eclipse/paho.mqtt.android
mqtt的官方文檔: http://mqtt.org/documentation
Github上有中文翻譯: https://github.com/mcxiaoke/mqtt

在mole的build.gradle文件中添加依賴

在 AndroidManifest.xml 添加限權

在 AndroidManifest.xml 注冊Service (MyMqttService為自己寫的服務,下文會講到)

熱點內容
servlet的webxml怎麼配置 發布:2025-05-14 02:51:46 瀏覽:772
怎麼取消手勢密碼 發布:2025-05-14 02:51:11 瀏覽:639
openvpn搭建vpn伺服器搭建 發布:2025-05-14 02:47:52 瀏覽:998
密碼忘了從哪裡找 發布:2025-05-14 02:39:09 瀏覽:548
我的世界什麼伺服器有前途 發布:2025-05-14 02:30:31 瀏覽:528
java程序反編譯 發布:2025-05-14 02:18:46 瀏覽:458
蛤蟆編程 發布:2025-05-14 02:17:12 瀏覽:643
解壓縮文件後綴 發布:2025-05-14 02:14:07 瀏覽:304
閱章娛樂系統清理數據密碼是多少 發布:2025-05-14 02:09:10 瀏覽:973
米家的密碼鎖初始密碼是多少 發布:2025-05-14 01:58:51 瀏覽:37