java mqtt 断线重连,mqtt+java+spring(含断线重连)

本文介绍了如何在Java应用中使用MQTT进行消息传递,并结合Spring进行集成,实现断线重连功能。通过添加相关依赖,配置MQTT连接参数,创建MQTT客户端,设置回调对象,以及在回调中实现重连机制。此外,还展示了如何在Spring Boot应用中配置MQTT客户端并进行发布、订阅操作的测试。
摘要由CSDN通过智能技术生成

一.pom.xml中添加mqtt的依赖:

org.springframework.boot

spring-boot-starter-integration

org.springframework.integration

spring-integration-stream

org.springframework.integration

spring-integration-mqtt

二.application.properties配置文件中添加配置(其中MQTT的服务端使用的是ActiveMQ):

## MQTT##

mqtt.host=tcp://127.0.0.1:1883

mqtt.clientId=mqttClient

mqtt.username=admin

mqtt.password=admin

mqtt.topicName1=topic1

mqtt.topicName2=topic2

mqtt.timeout=1000

mqtt.keepalive=2000

三.编码自己的MQTT客户端:

package mqtt2;

import org.eclipse.paho.client.mqttv3.*;

import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

/**

* description:

* author: yangzihe

* date: 2018-12-17 17:33

**/

public class MyMQTTClient {

private static final Logger LOGGER = LoggerFactory.getLogger(MyMQTTClient.class);

private static MqttClient client;

public static MqttClient getClient() {

return client;

}

public static void setClient(MqttClient client) {

MyMQTTClient.client = client;

}

private String host;

private String username;

private String password;

private String clientId;

private int timeout;

private int keepalive;

public MyMQTTClient(String host, String username, String password, String clientId, int timeOut, int keepAlive) {

this.host = host;

this.username = username;

this.password = password;

this.clientId = clientId;

this.timeout = timeOut;

this.keepalive = keepAlive;

}

/**

* 设置mqtt连接参数

*

* @param username

* @param password

* @param timeout

* @param keepalive

* @return

*/

public MqttConnectOptions setMqttConnectOptions(String username, String password, int timeout, int keepalive) {

MqttConnectOptions options = new MqttConnectOptions();

options.setUserName(username);

options.setPassword(password.toCharArray());

options.setConnectionTimeout(timeout);

options.setKeepAliveInterval(keepalive);

options.setCleanSession(false);

return options;

}

/**

* 连接mqtt服务端,得到MqttClient连接对象

*/

public void connect() throws MqttException {

if (client == null) {

client = new MqttClient(host, clientId, new MemoryPersistence());

client.setCallback(new MyMQTTCallback(MyMQTTClient.this));

}

MqttConnectOptions mqttConnectOptions = setMqttConnectOptions(username, password, timeout, keepalive);

if (!client.isConnected()) {

client.connect(mqttConnectOptions);

} else {

client.disconnect();

client.connect(mqttConnectOptions);

}

<
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值