上篇博文讲了安装和配置: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";
}
}
测试类:
动动你的大手,试试!