<ul id="i4ug0"></ul>
  • <ul id="i4ug0"></ul>
    <ul id="i4ug0"></ul> <ul id="i4ug0"><sup id="i4ug0"></sup></ul><ul id="i4ug0"></ul>
  • 智宇物聯(lián) 專(zhuān)注于提供高穩(wěn)定、高速率的三網(wǎng)物聯(lián)網(wǎng)卡

    安順低帶寬環(huán)境下的物聯(lián)網(wǎng)傳輸協(xié)議–MQTT

    • 作者:智宇物聯(lián)
    • 發(fā)表時(shí)間:2022年10月13日
    • 來(lái)源:智宇物聯(lián)

    MQTT是什么

    MQTT由IBM公司開(kāi)發(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ù)。

    低帶寬環(huán)境下的物聯(lián)網(wǎng)傳輸協(xié)議——MQTT

    MQTT中的概念

    • 訂閱(Subscribtion): 訂閱包含主題篩選器(Topic Filter)和最大服務(wù)質(zhì)量(QoS)。訂閱會(huì)與一個(gè)會(huì)話(huà)(Session)關(guān)聯(lián)。一個(gè)會(huì)話(huà)可以包含多個(gè)訂閱。每一個(gè)會(huì)話(huà)中的每個(gè)訂閱都有一個(gè)不同的主題篩選器
    • 會(huì)話(huà)(Session): 每個(gè)客戶(hù)端與服務(wù)器建立連接后就是一個(gè)會(huì)話(huà),客戶(hù)端和服務(wù)器之間有狀態(tài)交互。會(huì)話(huà)存在于一個(gè)網(wǎng)絡(luò)之間,也可能在客戶(hù)端和服務(wù)器之間跨越多個(gè)連續(xù)的網(wǎng)絡(luò)連接。
    • 主題名(Topic Name): 連接到一個(gè)應(yīng)用程序消息的標(biāo)簽,該標(biāo)簽與服務(wù)器的訂閱相匹配。服務(wù)器會(huì)將消息發(fā)送給訂閱所匹配標(biāo)簽的每個(gè)客戶(hù)端。 需要注意的是,MQTT中消息主題按照層級(jí)命名,使用 ‘/’ 進(jìn)行分割 此外,主題中可以使用通配符進(jìn)行多個(gè)主題或多層級(jí)的訂閱,有兩種常見(jiàn)的通配符: 單層通配符 +:?jiǎn)螌油ㄅ浞荒芷ヅ湟粚拥闹黝},例如: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é)議,專(zhuān)門(mén)針對(duì)低帶寬和不穩(wěn)定網(wǎng)絡(luò)環(huán)境的物聯(lián)網(wǎng)應(yīng)用設(shè)計(jì)。

    特點(diǎn)

    • 開(kāi)放消息協(xié)議,簡(jiǎn)單易實(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)類(lèi)似URL路徑

    低帶寬環(huán)境下的物聯(lián)網(wǎng)傳輸協(xié)議——MQTT

    使用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的客戶(hù)端上線(xiàn)后,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)簽:
    最新資訊
    最熱資訊
    主站蜘蛛池模板: 国产成人精品男人的天堂网站| 国产成人综合洲欧美在线| 亚洲激情成人网| 69国产成人精品午夜福中文| 亚洲AV成人无码网站| 成人浮力影院免费看| 国产成人精品福利色多多| 亚洲欧洲精品成人久久曰| 成人精品一区二区户外勾搭野战| 成人免费的性色视频| 久久亚洲国产成人精品性色 | 久久久国产成人精品| 成人午夜18免费看| 88aa四虎影成人精品| 国产成人vr精品a视频| 成人五级毛片免费播放| 91成人免费观看在线观看| 国产成人a人亚洲精品无码| 成人毛片在线视频| WWW国产成人免费观看视频| 四虎影视永久地址www成人| 国产成人艳妇aa视频在线| 久久久久99精品成人片欧美| 亚洲成人网在线播放| 国产成人免费高清激情视频| 成人精品一区二区三区中文字幕 | 亚洲国产成人超福利久久精品| 成人国产激情福利久久精品| 欧美成人精品第一区首页 | 国产成人午夜片在线观看| 国产精品成人久久久久久久| 成人网站免费看黄a站视频| 中文国产成人精品久久一| 亚洲午夜成人片| 中文国产成人精品久久久| www国产成人免费观看视频 | 国产成人av在线影院| 免费无码成人AV在线播放不卡| 国产69久久精品成人看小说| 亚洲欧美日韩成人一区在线| 国产69久久精品成人看|