mqtt协议 springboot2.0.4 mqttv3 发布订阅代码调用,mqtt断线重连

上篇博文讲了安装和配置:https://blog.csdn.net/jianeng_Love_IT/article/details/83061717

mqttv3 发布订阅代码调用

我用的是springboot2.0.4

直接上代码:

pom.xml

  <dependency>
            <groupId>org.eclipse.paho</groupId>
            <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
            <version>1.2.0</version>
        </dependency>

简单的调用代码:

回调处理类:

public class CallBack implements MqttCallback {

    private MqttClient client;
    private MqttConnectOptions options;

    public CallBack() {
    }

    public CallBack(MqttClient client, MqttConnectOptions options) {
        this.client = client;
        this.options = options;
    }
    //方法实现说明 断线重连方法,如果是持久订阅,重连是不需要再次订阅,如果是非持久订阅,重连是需要重新订阅主题 取决于options.setCleanSession(true); true为非持久订阅
    @Override
    public void connectionLost(Throwable cause) {
       //失败重连逻辑
        while (true){
            try {
                System.out.println("连接失败重连");
                client.connect(options);
                //发布相关的订阅
                String[] topic = {"msg.topic","dance.topic"};
                int[] qos = {1,1};
                client.subscribe(topic, qos);
                System.out.println("连接失败重连成功");
                break;
            } catch (MqttException e) {
                e.printStackTrace();
                System.out.println("连接失败重连失败");
            }
        }
    }

    @Override
    public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
        System.out.println(new Date());
        System.out.println("public void messageArrived(String s, MqttMessage mqttMessage)");
        System.out.println(s);
        System.out.println(new String(mqttMessage.getPayload(),"UTF-8"));
    }

    @Override
    public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
        System.out.println("public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken)");
    }
}

发布类:

public class MQTTPublisher {
    public static void publish(){
        try {
            MqttClient client = new MqttClient("tcp://127.0.0.1:61613","mqttserver-pub");
            MqttConnectOptions options = new MqttConnectOptions();
            options.setUserName("admin");
            options.setPassword("admin".toCharArray());
            options.setCleanSession(false);
            options.setAutomaticReconnect(true);
            client.connect(options);
            MqttTopic topic = client.getTopic("msg.topic");
            MqttMessage message = new MqttMessage("Hello World".getBytes());
            message.setQos(1);
            while(true){
                Thread.sleep(1000);
                MqttDeliveryToken token = topic.publish(message);
                while (!token.isComplete()){
                    token.waitForCompletion(1000);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

订阅类:

public class MQTTSubsribe {
    public static String subsribe() {
        try {
            //创建MqttClient
            MqttClient client = new MqttClient("tcp://127.0.0.1:61613", "java_client23432ere");
            //创建连接可选项信息
            MqttConnectOptions conOptions = new MqttConnectOptions();
            //
            conOptions.setUserName("admin");
            conOptions.setPassword("admin".toCharArray());
            conOptions.setCleanSession(false);
            conOptions.setAutomaticReconnect(true);
            //回调处理类
            CallBack callback = new CallBack(client,conOptions);
            client.setCallback(callback);
            //连接broker
            client.connect(conOptions);
            //发布相关的订阅
            String[] topic = {"msg.topic","dance.topic"};
            int[] qos = {1,1};
            client.subscribe(topic, qos);
            //client.disconnect();
        } catch (Exception e) {
            e.printStackTrace();
            return "failed";
        }
        return "success";
    }
}

测试类:

动动你的大手,试试!

猜你喜欢

转载自blog.csdn.net/jianeng_Love_IT/article/details/83062512