MQTT:java实现:
一、首先搭建MQTT服务器
1、服务器下载地址:代理服务器
http://archive.apache.org/dist/activemq/activemq-apollo/1.7.1/
安装过程:
2、解压后的bin文件夹下:cmd 执行命令:apollo.cmd create mybroker
然后会自动创建一个mybroker的文件夹:为刚刚命令后取的名字
3、再进入mybroke文件夹里面,再执行cmd 命令:
apollo-broker.cmd run
然后访问网页:http://127.0.0.1:61680/console/index.html#
默认账户:admin
默认密码:password
代理服务器就启动成功了!
二、实现java代码:
其实服务端和客户端都是mqtt服务器的客户,只是一个发布,一个接收:
依赖:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>dtest</artifactId> <version>0.0.1-SNAPSHOT</version> <name>dtest</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
<span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-boot-starter-test<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>scope</span><span class="token punctuation">></span></span>test<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>scope</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.projectlombok<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>lombok<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>optional</span><span class="token punctuation">></span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>optional</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.integration<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-integration-mqtt<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>5.4.6<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependencies</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>build</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>plugins</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>plugin</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-boot-maven-plugin<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>plugin</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>plugins</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>build</span><span class="token punctuation">></span></span>
</project>
服务端代码:
package com.example.dtest.mqtt;
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
public class MqttService {
<span class="token comment">//tcp: MQTT安装的服务器地址 :MQTT定义的端口</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> String HOST <span class="token operator">=</span> <span class="token string">"tcp://0.0.0.0:61613"</span><span class="token punctuation">;</span>
<span class="token comment">//定义一个主题</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> String TOPIC <span class="token operator">=</span> <span class="token string">"topic11"</span><span class="token punctuation">;</span>
<span class="token comment">//定义MQTT的ID,可以在MQTT服务配置中指定</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> String clentid <span class="token operator">=</span> <span class="token string">"server11"</span><span class="token punctuation">;</span>
<span class="token keyword">private</span> MqttClient client<span class="token punctuation">;</span>
<span class="token keyword">private</span> MqttTopic topic11<span class="token punctuation">;</span>
<span class="token keyword">private</span> String userName <span class="token operator">=</span> <span class="token string">"admin"</span><span class="token punctuation">;</span>
<span class="token keyword">private</span> String passWord <span class="token operator">=</span> <span class="token string">"password"</span><span class="token punctuation">;</span>
<span class="token keyword">private</span> MqttMessage message<span class="token punctuation">;</span>
<span class="token comment">/**
* 构造函数
* @throws MqttService
*/</span>
<span class="token keyword">public</span> <span class="token function">MqttService</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">throws</span> MqttException <span class="token punctuation">{<!-- --></span>
<span class="token comment">// MemoryPersistence设置clientid的保存形式,默认为以内存保存</span>
client <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MqttClient</span><span class="token punctuation">(</span>HOST<span class="token punctuation">,</span> clentid<span class="token punctuation">,</span><span class="token keyword">new</span> <span class="token class-name">MemoryPersistence</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token function">connect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">/**
* 连接服务器
*/</span>
<span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">connect</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
MqttConnectOptions options <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MqttConnectOptions</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
options<span class="token punctuation">.</span><span class="token function">setCleanSession</span><span class="token punctuation">(</span><span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
options<span class="token punctuation">.</span><span class="token function">setUserName</span><span class="token punctuation">(</span>userName<span class="token punctuation">)</span><span class="token punctuation">;</span>
options<span class="token punctuation">.</span><span class="token function">setPassword</span><span class="token punctuation">(</span>passWord<span class="token punctuation">.</span><span class="token function">toCharArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//设置超时时间</span>
options<span class="token punctuation">.</span><span class="token function">setConnectionTimeout</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//设置回话心跳时间</span>
options<span class="token punctuation">.</span><span class="token function">setKeepAliveInterval</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">try</span> <span class="token punctuation">{<!-- --></span>
client<span class="token punctuation">.</span><span class="token function">setCallback</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">PushCallback</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
client<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span>options<span class="token punctuation">)</span><span class="token punctuation">;</span>
topic11 <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">getTopic</span><span class="token punctuation">(</span>TOPIC<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">MqttException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token comment">/**
*
* @param topic
* @param message
* @throws MqttPersistenceException
* @throws MqttException
*/</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">publish</span><span class="token punctuation">(</span>MqttTopic topic<span class="token punctuation">,</span>MqttMessage message<span class="token punctuation">)</span> <span class="token keyword">throws</span> MqttException <span class="token punctuation">{<!-- --></span>
MqttDeliveryToken token <span class="token operator">=</span> topic<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span>
token<span class="token punctuation">.</span><span class="token function">waitForCompletion</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"message is published completely!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">/**
* 启动入口
* @param args
* @throws MqttException
*/</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> MqttException <span class="token punctuation">{<!-- --></span>
MqttService server <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MqttService</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
server<span class="token punctuation">.</span>message <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MqttMessage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
server<span class="token punctuation">.</span>message<span class="token punctuation">.</span><span class="token function">setQos</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
server<span class="token punctuation">.</span>message<span class="token punctuation">.</span><span class="token function">setRetained</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
server<span class="token punctuation">.</span>message<span class="token punctuation">.</span><span class="token function">setPayload</span><span class="token punctuation">(</span><span class="token string">"哈哈哈哈"</span><span class="token punctuation">.</span><span class="token function">getBytes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
server<span class="token punctuation">.</span><span class="token function">publish</span><span class="token punctuation">(</span>server<span class="token punctuation">.</span>topic11 <span class="token punctuation">,</span> server<span class="token punctuation">.</span>message<span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span>server<span class="token punctuation">.</span>message<span class="token punctuation">.</span><span class="token function">isRetained</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"------ratained状态"</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
}
客户端代码:
package com.example.dtest.mqtt;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttTopic;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;
import java.util.concurrent.ScheduledExecutorService;
public class MyMqttClient {
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> String HOST <span class="token operator">=</span> <span class="token string">"tcp://0.0.0.0:61613"</span><span class="token punctuation">;</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">final</span> String TOPIC <span class="token operator">=</span> <span class="token string">"topic11"</span><span class="token punctuation">;</span>
<span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">final</span> String clientid <span class="token operator">=</span> <span class="token string">"client11"</span><span class="token punctuation">;</span>
<span class="token keyword">private</span> MqttClient client<span class="token punctuation">;</span>
<span class="token keyword">private</span> MqttConnectOptions options<span class="token punctuation">;</span>
<span class="token keyword">private</span> String userName <span class="token operator">=</span> <span class="token string">"admin"</span><span class="token punctuation">;</span>
<span class="token keyword">private</span> String passWord <span class="token operator">=</span> <span class="token string">"password"</span><span class="token punctuation">;</span>
<span class="token keyword">private</span> ScheduledExecutorService scheduler<span class="token punctuation">;</span>
<span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{<!-- --></span>
<span class="token keyword">try</span> <span class="token punctuation">{<!-- --></span>
<span class="token comment">// host为主机名,clientid即连接MQTT的客户端ID,一般以唯一标识符表示,</span>
<span class="token comment">// MemoryPersistence设置clientid的保存形式,默认为以内存保存</span>
client <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MqttClient</span><span class="token punctuation">(</span>HOST<span class="token punctuation">,</span>clientid<span class="token punctuation">,</span><span class="token keyword">new</span> <span class="token class-name">MemoryPersistence</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// MQTT的连接设置</span>
options <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MqttConnectOptions</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置是否清空session,这里如果设置为false表示服务器会保留客户端的连接记录,</span>
<span class="token comment">// 这里设置为true表示每次连接到服务器都以新的身份连接</span>
options<span class="token punctuation">.</span><span class="token function">setCleanSession</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置连接的用户名</span>
options<span class="token punctuation">.</span><span class="token function">setUserName</span><span class="token punctuation">(</span>userName<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置连接的密码</span>
options<span class="token punctuation">.</span><span class="token function">setPassword</span><span class="token punctuation">(</span>passWord<span class="token punctuation">.</span><span class="token function">toCharArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置超时时间 单位为秒</span>
options<span class="token punctuation">.</span><span class="token function">setConnectionTimeout</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置会话心跳时间 单位为秒 服务器会每隔1.5*20秒的时间向客户端发送个消息判断客户端是否在线,</span>
<span class="token comment">// 但这个方法并没有重连的机制</span>
options<span class="token punctuation">.</span><span class="token function">setKeepAliveInterval</span><span class="token punctuation">(</span><span class="token number">20</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">// 设置回调</span>
client<span class="token punctuation">.</span><span class="token function">setCallback</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">PushCallback</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
MqttTopic topic <span class="token operator">=</span> client<span class="token punctuation">.</span><span class="token function">getTopic</span><span class="token punctuation">(</span>TOPIC<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token comment">//setWill方法,如果项目中需要知道客户端是否掉线可以调用该方法。设置最终端口的通知消息</span>
options<span class="token punctuation">.</span><span class="token function">setWill</span><span class="token punctuation">(</span>topic<span class="token punctuation">,</span><span class="token string">"close"</span><span class="token punctuation">.</span><span class="token function">getBytes</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
client<span class="token punctuation">.</span><span class="token function">connect</span><span class="token punctuation">(</span>options<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token keyword">int</span><span class="token punctuation">[</span><span class="token punctuation">]</span> Qos <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span><span class="token number">1</span><span class="token punctuation">}</span><span class="token punctuation">;</span>
String<span class="token punctuation">[</span><span class="token punctuation">]</span> topic1 <span class="token operator">=</span> <span class="token punctuation">{<!-- --></span>TOPIC<span class="token punctuation">}</span><span class="token punctuation">;</span>
client<span class="token punctuation">.</span><span class="token function">subscribe</span><span class="token punctuation">(</span>topic1<span class="token punctuation">,</span>Qos<span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">MqttException</span> e<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
e<span class="token punctuation">.</span><span class="token function">printStackTrace</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token punctuation">}</span>
<span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
MyMqttClient client <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">MyMqttClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
client<span class="token punctuation">.</span><span class="token function">start</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
}
回滚代码:一般非阻塞方式,都是要使用回滚形式的:
package com.example.dtest.mqtt;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public class PushCallback implements MqttCallback {
@Override
public void connectionLost(Throwable throwable) {
//连接丢失后,一般在这里面进行重连
System.out.println(“连接断开,可以做重连”);
}
<span class="token comment">//客户端回调</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">messageArrived</span><span class="token punctuation">(</span>String topic<span class="token punctuation">,</span> MqttMessage mqttMessage<span class="token punctuation">)</span> <span class="token keyword">throws</span> Exception <span class="token punctuation">{<!-- --></span>
<span class="token comment">// subscribe后得到的消息会执行到这里面</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"接收消息主题 : "</span><span class="token operator">+</span>topic<span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"接收消息Qos : "</span> <span class="token operator">+</span>mqttMessage<span class="token punctuation">.</span><span class="token function">getQos</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"接收消息内容 : "</span> <span class="token operator">+</span><span class="token keyword">new</span> <span class="token class-name">String</span><span class="token punctuation">(</span>mqttMessage<span class="token punctuation">.</span><span class="token function">getPayload</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token comment">//服务端回调</span>
<span class="token annotation punctuation">@Override</span>
<span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">deliveryComplete</span><span class="token punctuation">(</span>IMqttDeliveryToken iMqttDeliveryToken<span class="token punctuation">)</span> <span class="token punctuation">{<!-- --></span>
System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"deliveryComplete---------"</span> <span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
}