智宇物聯(lián) 專注于提供高穩(wěn)定、高速率的三網(wǎng)物聯(lián)網(wǎng)卡
聊城低帶寬環(huán)境下的物聯(lián)網(wǎng)傳輸協(xié)議–MQTT
- 作者:智宇物聯(lián)
- 發(fā)表時(shí)間:2022年10月13日
- 來源:智宇物聯(lián)
MQTT是什么
MQTT由IBM公司開發(fā),是一個(gè)即時(shí)通訊協(xié)議,也是一個(gè)物聯(lián)網(wǎng)傳輸協(xié)議,主要用于輕量級(jí)的訂閱/發(fā)布式的消息傳輸。其設(shè)計(jì)目的主要是為低帶寬和不穩(wěn)定網(wǎng)絡(luò)環(huán)境下的物聯(lián)網(wǎng)設(shè)備提供服務(wù)。

MQTT中的概念
- 訂閱(Subscribtion): 訂閱包含主題篩選器(Topic Filter)和最大服務(wù)質(zhì)量(QoS)。訂閱會(huì)與一個(gè)會(huì)話(Session)關(guān)聯(lián)。一個(gè)會(huì)話可以包含多個(gè)訂閱。每一個(gè)會(huì)話中的每個(gè)訂閱都有一個(gè)不同的主題篩選器
- 會(huì)話(Session): 每個(gè)客戶端與服務(wù)器建立連接后就是一個(gè)會(huì)話,客戶端和服務(wù)器之間有狀態(tài)交互。會(huì)話存在于一個(gè)網(wǎng)絡(luò)之間,也可能在客戶端和服務(wù)器之間跨越多個(gè)連續(xù)的網(wǎng)絡(luò)連接。
- 主題名(Topic Name): 連接到一個(gè)應(yīng)用程序消息的標(biāo)簽,該標(biāo)簽與服務(wù)器的訂閱相匹配。服務(wù)器會(huì)將消息發(fā)送給訂閱所匹配標(biāo)簽的每個(gè)客戶端。 需要注意的是,MQTT中消息主題按照層級(jí)命名,使用 ‘/’ 進(jìn)行分割 此外,主題中可以使用通配符進(jìn)行多個(gè)主題或多層級(jí)的訂閱,有兩種常見的通配符: 單層通配符 +:單層通配符只能匹配一層的主題,例如:China/Beijing/+,可以匹配的只有Beijing這個(gè)主題下面一層的主題,例如Xicheng, DongCheng, Xuanwu等等。 多層通配符 #:顧名思義,多層通配符就是可以匹配多個(gè)層級(jí)的主題,例如:China/#,可以匹配到的主題可能有:China/Beijing/Dongcheng, China/Shanghai/PuDong,等等。
- 主題篩選器(Topic Filter): 一個(gè)對(duì)主題名通配符篩選器,在訂閱表達(dá)式中使用,表示訂閱所匹配到的多個(gè)主題。
- 負(fù)載(Payload): 消息訂閱者所具體接收的內(nèi)容
MQTT協(xié)議的使用
MQTT是一個(gè)輕量的發(fā)布訂閱模式消息傳輸協(xié)議,專門針對(duì)低帶寬和不穩(wěn)定網(wǎng)絡(luò)環(huán)境的物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì)。
特點(diǎn)
- 開放消息協(xié)議,簡單易實(shí)現(xiàn)
- 發(fā)布訂閱模式,一對(duì)多消息發(fā)布
- 基于TCP/IP網(wǎng)絡(luò)連接
- 1字節(jié)固定報(bào)頭,2字節(jié)心跳報(bào)文,報(bào)文結(jié)構(gòu)緊湊
- 消息QoS支持,可靠傳輸保證
MQTT協(xié)議基于主題(Topic)進(jìn)行消息路由,主題(Topic)類似URL路徑

使用MQTT連接EMQ
生產(chǎn)端
@Configuration
public class MqttSenderConfig {
@Value("${emq.connection.mqtt_url}")
private String MQTT_URL;
@Value("${emq.connection.client_token}")
private String TOKEN;
@Value("${emq.connection.client_id}")
private String CLIENT_ID;
@Bean
public MqttPahoClientFactory mqttClientFactory() {
DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory();
MqttConnectOptions options = new MqttConnectOptions();
options.setServerURIs(new String[]{MQTT_URL});
options.setUserName(CLIENT_ID);
options.setPassword(TOKEN.toCharArray());
factory.setConnectionOptions(options);
return factory;
}
@Bean
@ServiceActivator(inputChannel = "mqttOutboundChannel")
public MessageHandler mqttOutbound() {
MqttPahoMessageHandler messageHandler =
new MqttPahoMessageHandler(CLIENT_ID, mqttClientFactory());
messageHandler.setAsync(true);
messageHandler.setDefaultTopic("topic");
return messageHandler;
}
@Bean
public MessageChannel mqttOutboundChannel() {
return new DirectChannel();
}
}
@Component
@MessagingGateway(defaultRequestChannel = "mqttOutboundChannel")
public interface MyGateway {
void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, String payload);
void sendToMqtt(@Header(MqttHeaders.TOPIC) String topic, @Header(MqttHeaders.QOS) int qos, @Header(MqttHeaders.RETAINED) Boolean retained, String payload);
}
retained true 保留數(shù)據(jù),Broker會(huì)存儲(chǔ)每個(gè)Topic的最后一條保留消息及其Qos,當(dāng)訂閱該Topic的客戶端上線后,Broker需要將該消息投遞給它。
消費(fèi)端
@Configuration
@Slf4j
public class MqttInboundConfiguration {
@Value("${emq.connection.mqtt_url}")
private String MQTT_URL;
@Value("${emq.connection.client_token}")
private String TOKEN;
@Value("${emq.connection.client_id}")
private String CLIENT_ID;
@Bean
public MessageProducer inbound() {
MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(MQTT_URL, CLIENT_ID,
"topic");
adapter.setCompletionTimeout(5000);
adapter.setConverter(new DefaultPahoMessageConverter());
adapter.setQos(1);
adapter.setOutputChannel(mqttInputChannel());
return adapter;
}
@Bean
public MessageChannel mqttInputChannel() {
return new DirectChannel();
}
}
@Slf4j
@Component
public class MqttSubscribeImpl {
@ServiceActivator(inputChannel = "mqttInputChannel")
public void handleMessage(Message<?> message) throws MessagingException {
log.info(message.getPayload().toString());
}
文章標(biāo)簽:
最新資訊
- 聊城南京物聯(lián)網(wǎng)卡限制(如何看待南京大眾書局的聯(lián)名卡事件)
- 聊城自動(dòng)售貨機(jī)物聯(lián)卡的核心功能與優(yōu)勢
- 聊城物聯(lián)卡:解鎖自動(dòng)售貨機(jī)的智能進(jìn)化密碼
- 聊城物聯(lián)卡:解鎖自動(dòng)售貨機(jī)智能化的關(guān)鍵密鑰
- 聊城重構(gòu)無人零售的智慧引擎(物聯(lián)卡)
- 聊城智能終端革命:解碼自動(dòng)售貨機(jī)重構(gòu)零售業(yè)的底層邏輯
- 聊城物聯(lián)卡賦能自動(dòng)售貨機(jī):智能化升級(jí)與價(jià)值釋放
- 聊城自動(dòng)售貨機(jī)物聯(lián)卡:智能化、場景化與生態(tài)化演進(jìn)?
- 聊城自動(dòng)售貨機(jī)的數(shù)字化躍遷引擎?
- 聊城自動(dòng)售貨機(jī)物聯(lián)卡:開啟智能零售新時(shí)代
最熱資訊
- 聊城華為物聯(lián)網(wǎng)卡網(wǎng)速慢(華為手機(jī)流量網(wǎng)速慢怎么辦)
- 聊城醫(yī)院需要物聯(lián)網(wǎng)卡嗎(什么是物聯(lián)網(wǎng)卡,與手機(jī)卡有什么區(qū)別,能用在手機(jī)上嗎)
- 聊城智能穿戴物聯(lián)卡行業(yè)綜合解決方案
- 聊城安防監(jiān)控物聯(lián)卡行業(yè)綜合解決方案:智能化時(shí)代的“安全守護(hù)者”
- 聊城物聯(lián)卡是如何盤活自動(dòng)售貨機(jī)市場的?
- 聊城車聯(lián)網(wǎng)物聯(lián)卡行業(yè)綜合解決方案:驅(qū)動(dòng)智慧出行的“數(shù)字紐帶”
- 聊城POS機(jī)物聯(lián)卡行業(yè)綜合解決方案:驅(qū)動(dòng)智能支付場景的數(shù)字化轉(zhuǎn)型
- 聊城智慧林業(yè):構(gòu)建全鏈路數(shù)字化生態(tài)系統(tǒng)的創(chuàng)新實(shí)踐
- 聊城智慧農(nóng)業(yè):重塑現(xiàn)代農(nóng)業(yè)的數(shù)字化革命?
- 聊城智慧醫(yī)療:生命科學(xué)革命下的醫(yī)療生態(tài)重構(gòu)