MQTT java实现

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">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-starter-test<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>scope</span><span class="token punctuation">&gt;</span></span>test<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>scope</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>

    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.projectlombok<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>lombok<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>optional</span><span class="token punctuation">&gt;</span></span>true<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>optional</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>

    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>dependency</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.integration<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-integration-mqtt<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>version</span><span class="token punctuation">&gt;</span></span>5.4.6<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>version</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependency</span><span class="token punctuation">&gt;</span></span>



<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>dependencies</span><span class="token punctuation">&gt;</span></span>

<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>build</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>plugins</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>plugin</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>groupId</span><span class="token punctuation">&gt;</span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>groupId</span><span class="token punctuation">&gt;</span></span>
            <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>artifactId</span><span class="token punctuation">&gt;</span></span>spring-boot-maven-plugin<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>artifactId</span><span class="token punctuation">&gt;</span></span>
        <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>plugin</span><span class="token punctuation">&gt;</span></span>
    <span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>plugins</span><span class="token punctuation">&gt;</span></span>
<span class="token tag"><span class="token tag"><span class="token punctuation">&lt;/</span>build</span><span class="token punctuation">&gt;</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>
    

    }

      • 0
        点赞
      • 8
        收藏
        觉得还不错? 一键收藏
      • 0
        评论
      以下是两种Java实现MQTT的方式: 1. 使用Paho Java实现MQTT: ```java import org.eclipse.paho.client.mqttv3.*; import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence; public class MqttClientExample { public static void main(String[] args) { String broker = "tcp://mqtt.eclipse.org:1883"; String clientId = "JavaExample"; MemoryPersistence persistence = new MemoryPersistence(); try { MqttClient mqttClient = new MqttClient(broker, clientId, persistence); MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); mqttClient.connect(connOpts); System.out.println("Connected to MQTT broker"); String topic = "test/topic"; int qos = 1; mqttClient.subscribe(topic, qos); System.out.println("Subscribed to topic: " + topic); mqttClient.setCallback(new MqttCallback() { public void connectionLost(Throwable cause) { System.out.println("Connection lost"); } public void messageArrived(String topic, MqttMessage message) throws Exception { System.out.println("Received message: " + new String(message.getPayload())); } public void deliveryComplete(IMqttDeliveryToken token) { System.out.println("Message delivered"); } }); // Publish a message String payload = "Hello, MQTT!"; mqttClient.publish(topic, new MqttMessage(payload.getBytes())); System.out.println("Published message: " + payload); // Disconnect from the broker mqttClient.disconnect(); System.out.println("Disconnected from MQTT broker"); } catch (MqttException e) { e.printStackTrace(); } } } ``` 2. 使用Spring Boot实现MQTT: 首先,需要在pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-integration</artifactId> </dependency> <dependency> <groupId>org.springframework.integration</groupId> <artifactId>spring-integration-mqtt</artifactId> </dependency> ``` 然后,创建一个MqttConfig类来配置MQTT连接: ```java import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.annotation.MessagingGateway; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.integration.channel.DirectChannel; import org.springframework.integration.config.EnableIntegration; import org.springframework.integration.core.MessageProducer; import org.springframework.integration.core.MessagingTemplate; import org.springframework.integration.mqtt.core.DefaultMqttPahoClientFactory; import org.springframework.integration.mqtt.core.MqttPahoClientFactory; import org.springframework.integration.mqtt.inbound.MqttPahoMessageDrivenChannelAdapter; import org.springframework.integration.mqtt.outbound.MqttPahoMessageHandler; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.MessageHandler; @Configuration @EnableIntegration public class MqttConfig { private static final String BROKER = "tcp://mqtt.eclipse.org:1883"; private static final String CLIENT_ID = "SpringBootExample"; private static final String TOPIC = "test/topic"; @Bean public MqttPahoClientFactory mqttClientFactory() { DefaultMqttPahoClientFactory factory = new DefaultMqttPahoClientFactory(); factory.setServerURIs(BROKER); return factory; } @Bean public MessageChannel mqttInputChannel() { return new DirectChannel(); } @Bean public MessageProducer inbound() { MqttPahoMessageDrivenChannelAdapter adapter = new MqttPahoMessageDrivenChannelAdapter(CLIENT_ID, mqttClientFactory(), TOPIC); adapter.setCompletionTimeout(5000); adapter.setConverter(new DefaultPahoMessageConverter()); adapter.setQos(1); adapter.setOutputChannel(mqttInputChannel()); return adapter; } @Bean @ServiceActivator(inputChannel = "mqttInputChannel") public MessageHandler handler() { return message -> { System.out.println("Received message: " + message.getPayload()); }; } @Bean @MessagingGateway(defaultRequestChannel = "mqttOutputChannel") public interface MqttGateway { void sendToMqtt(String payload); } @Bean public MessageChannel mqttOutputChannel() { return new DirectChannel(); } @Bean @ServiceActivator(inputChannel = "mqttOutputChannel") public MessageHandler mqttOutbound() { MqttPahoMessageHandler messageHandler = new MqttPahoMessageHandler(CLIENT_ID, mqttClientFactory()); messageHandler.setAsync(true); messageHandler.setDefaultTopic(TOPIC); return messageHandler; } @Bean public MessagingTemplate mqttMessageTemplate() { return new MessagingTemplate(mqttOutputChannel()); } } ``` 最后,创建一个MqttClientService类来发送消息: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.annotation.MessagingGateway; import org.springframework.stereotype.Service; @Service public class MqttClientService { @Autowired private MqttGateway mqttGateway; public void sendMessage(String payload) { mqttGateway.sendToMqtt(payload); } } @MessagingGateway(defaultRequestChannel = "mqttOutputChannel") public interface MqttGateway { void sendToMqtt(String payload); } ``` 以上是两种Java实现MQTT的方式,你可以根据自己的需求选择适合的方式进行实现

      “相关推荐”对你有帮助么?

      • 非常没帮助
      • 没帮助
      • 一般
      • 有帮助
      • 非常有帮助
      提交
      评论
      添加红包

      请填写红包祝福语或标题

      红包个数最小为10个

      红包金额最低5元

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

      抵扣说明:

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

      余额充值