最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springboot整合netty-mqtt-client實(shí)現(xiàn)Mqtt消息的訂閱和發(fā)布示例

 更新時(shí)間:2022年03月16日 14:16:28   作者:行云的逆襲  
本文主要介紹了springboot整合netty-mqtt-client實(shí)現(xiàn)Mqtt消息的訂閱和發(fā)布示例,文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

1.添加依賴(lài)

<dependency>
    <groupId>org.jetlinks</groupId>
    <artifactId>netty-mqtt-client</artifactId>
    <version>1.0.0</version>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.13.2</version>
    <scope>test</scope>
</dependency>

2.源碼

application.yml

#mqtt配置
mqtt:
  username: admin
  password: 123456
  #推送信息的連接地址
  url: localhost
  port: 1884
  #默認(rèn)發(fā)送的主題
  defaultTopic: topic
  #clientid
  clientId: client
  #連接超時(shí)時(shí)間 單位為秒
  completionTimeout: 300
  #設(shè)置會(huì)話心跳時(shí)間 單位為秒
  keepAliveInterval: 20

MqttProperties.java

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;

@Data
@ConfigurationProperties(prefix = "mqtt")
public class MqttProperties {

	private String username;
	private String password;
	private String url;
	private int port;
	private String clientId;
	private String defaultTopic;
	private int completionTimeout;
	private int keepAliveInterval;
}

MqttConfig.java

import com.xingyun.netty.mqtt.prop.MqttProperties;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import lombok.AllArgsConstructor;
import org.jetlinks.mqtt.client.*;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@AllArgsConstructor
@Configuration
@EnableConfigurationProperties(MqttProperties.class)
public class MqttConfig {

    private final MqttProperties mqttProperties;

    @Bean
    public MqttClientConfig getMqttClientConfig() {
        MqttClientConfig mqttClientConfig = new MqttClientConfig();
        mqttClientConfig.setClientId(mqttProperties.getClientId());
        mqttClientConfig.setUsername(mqttProperties.getClientId());
        mqttClientConfig.setPassword(mqttProperties.getPassword());
        /*mqttClientConfig.setTimeoutSeconds(mqttProperties.getCompletionTimeout());
        mqttClientConfig.setRetryInterval(mqttProperties.getKeepAliveInterval());
        mqttClientConfig.setProtocolVersion(MqttVersion.MQTT_3_1_1);
        mqttClientConfig.setReconnect(true);*/
        return mqttClientConfig;
    }

    @Bean
    public MqttClient getMqttClient(){
        EventLoopGroup loop = new NioEventLoopGroup(Runtime.getRuntime().availableProcessors() * 2);

        MqttClient mqttClient = new MqttClientImpl(getMqttClientConfig(),null);
        mqttClient.setEventLoop(loop);
        mqttClient.setCallback(getMqttClientCallback());
        mqttClient.connect(mqttProperties.getUrl(), mqttProperties.getPort()).addListener(future -> {
            if (future.isSuccess()){
                System.out.println("mqtt客戶端已建立連接");
                //#為多層通配符,+為單層通配符
                mqttClient.on("#",getMqttHandler());
            }
        });
        return mqttClient;
    }

    @Bean
    public MqttHandler getMqttHandler(){
        return (topic,payload) ->  {
            System.out.println("消息主題:" + topic);
            System.out.println("消息內(nèi)容:" + payload);
        };
    }

    @Bean
    public MqttClientCallback getMqttClientCallback(){
        return new MqttClientCallback() {
            @Override
            public void connectionLost(Throwable cause) {
                cause.printStackTrace();
            }

            @Override
            public void onSuccessfulReconnect() {
                System.out.println("客戶端已重連");
            }
        };
    }

}

3.運(yùn)行測(cè)試

客戶端利用不同主題,發(fā)送消息

在這里插入圖片描述

控制臺(tái)

消息主題:testTopic/001
消息內(nèi)容:PooledSlicedByteBuf(ridx: 0, widx: 15, cap: 15/15, unwrapped: PooledUnsafeDirectByteBuf(ridx: 32, widx: 32, cap: 512))
消息主題:testTopic/001
消息內(nèi)容:PooledSlicedByteBuf(ridx: 0, widx: 15, cap: 15/15, unwrapped: PooledUnsafeDirectByteBuf(ridx: 32, widx: 32, cap: 512))
消息主題:test/sub/001
消息內(nèi)容:PooledSlicedByteBuf(ridx: 0, widx: 15, cap: 15/15, unwrapped: PooledUnsafeDirectByteBuf(ridx: 31, widx: 31, cap: 496))
消息主題:test1
消息內(nèi)容:PooledSlicedByteBuf(ridx: 0, widx: 15, cap: 15/15, unwrapped: PooledUnsafeDirectByteBuf(ridx: 24, widx: 24, cap: 496))

單元測(cè)試發(fā)布消息
MqttSeviceDemo.java

import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import org.jetlinks.mqtt.client.MqttClient;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class MqttSeviceDemo {

    @Autowired
    private MqttClient mqttClient;

    @Test
    public void publishMessage(){
        String test = "I am client9527";
        byte[] bytes = test.getBytes();
        ByteBuf byteBuf = Unpooled.copiedBuffer(bytes);
        mqttClient.publish("test/pub/001",byteBuf);
        System.out.println("消息已發(fā)布");
    }

}

客戶端訂閱到消息

在這里插入圖片描述

 到此這篇關(guān)于springboot整合netty-mqtt-client實(shí)現(xiàn)Mqtt消息的訂閱和發(fā)布示例的文章就介紹到這了,更多相關(guān)springboot Mqtt消息訂閱和發(fā)布內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Security使用單點(diǎn)登錄的權(quán)限功能

    Spring Security使用單點(diǎn)登錄的權(quán)限功能

    本文主要介紹了Spring Security使用單點(diǎn)登錄的權(quán)限功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • java設(shè)計(jì)模式之中介者模式

    java設(shè)計(jì)模式之中介者模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式之中介者模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 使用Java DOM解析器修改XML文件內(nèi)容的操作方法

    使用Java DOM解析器修改XML文件內(nèi)容的操作方法

    在Java中,XML文件的解析和修改可以通過(guò)多種方法實(shí)現(xiàn),其中DOM(Document Object Model)是一種常用的方式,在本文中,我們將介紹如何使用Java DOM解析器修改XML文件中的內(nèi)容,并給出一個(gè)具體的示例,需要的朋友可以參考下
    2024-08-08
  • 解決springboot項(xiàng)目啟動(dòng)報(bào)錯(cuò)Field xxxMapper in com...xxxController required

    解決springboot項(xiàng)目啟動(dòng)報(bào)錯(cuò)Field xxxMapper in com...xx

    這篇文章主要介紹了解決springboot項(xiàng)目啟動(dòng)報(bào)錯(cuò)Field xxxMapper in com...xxxContr問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 如何使用Spring Boot實(shí)現(xiàn)自定義Spring Boot插件

    如何使用Spring Boot實(shí)現(xiàn)自定義Spring Boot插件

    在本文中,我們介紹了如何使用 Spring Boot 實(shí)現(xiàn)自定義插件,使用自定義插件可以幫助我們快速地添加一些額外的功能,提高系統(tǒng)的可擴(kuò)展性和可維護(hù)性,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • Mybatis接口式編程的原理

    Mybatis接口式編程的原理

    mybatis有兩種實(shí)現(xiàn)方式,一種可以通過(guò)xml配置文件實(shí)現(xiàn),其二是面向接口編程的實(shí)現(xiàn)。本文重點(diǎn)給大家介紹mybatis接口編程的原理,需要的的朋友參考下
    2017-03-03
  • 大數(shù)據(jù)Kafka:消息隊(duì)列和Kafka基本介紹

    大數(shù)據(jù)Kafka:消息隊(duì)列和Kafka基本介紹

    本文對(duì)消息隊(duì)列的應(yīng)用場(chǎng)景,優(yōu)缺點(diǎn),消息隊(duì)列的兩種方式,常見(jiàn)的消息隊(duì)列產(chǎn)品以及Kafka的特點(diǎn)和應(yīng)用場(chǎng)景做了詳細(xì)的講解,需要的朋友可以參考下,希望可以對(duì)大家有所幫助
    2021-08-08
  • Java中調(diào)用第三方接口的詳細(xì)代碼示例

    Java中調(diào)用第三方接口的詳細(xì)代碼示例

    這篇文章主要介紹了Java中調(diào)用第三方接口的詳細(xì)代碼示例,文章總結(jié)了多種Java進(jìn)行HTTP請(qǐng)求的方法,每種方法都有其特點(diǎn)和適用場(chǎng)景,從原生到封裝,再到聲明式客戶端,滿足了不同復(fù)雜度的HTTP請(qǐng)求需求,需要的朋友可以參考下
    2024-12-12
  • Java8中Stream流式操作指南之入門(mén)篇

    Java8中Stream流式操作指南之入門(mén)篇

    Java8中有兩大最為重要的改變,第一個(gè)是Lambda?表達(dá)式,另外一個(gè)則是Stream?API(java.util.stream.*),下面這篇文章主要給大家介紹了Java8中Stream流式操作指南之入門(mén)篇的相關(guān)資料,需要的朋友可以參考下
    2022-02-02
  • Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧

    Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧

    數(shù)組越界訪問(wèn)是指訪問(wèn)數(shù)組中超出其有效索引范圍的元素,這是一種常見(jiàn)的編程錯(cuò)誤,可能導(dǎo)致程序崩潰或數(shù)據(jù)損壞,下面這篇文章主要給大家介紹了關(guān)于Array?Index?Out?of?Bounds:數(shù)組越界錯(cuò)誤解決方案及調(diào)試技巧的相關(guān)資料,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

象山县| 拉孜县| 姚安县| 西乡县| 宣武区| 磐安县| 临江市| 克什克腾旗| 汾西县| 玛曲县| 礼泉县| 石阡县| 浦县| 桐柏县| 靖安县| 祁东县| 辽源市| 库尔勒市| 高清| 丰原市| 四川省| 肥东县| 红河县| 讷河市| 泸定县| 新疆| 晋城| 仁化县| 连州市| 共和县| 巴彦淖尔市| 山阳县| 铅山县| 南靖县| 大冶市| 通海县| 河东区| 调兵山市| 建水县| 和林格尔县| 唐河县|