前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Java开发MQTT实例代码分享

Java开发MQTT实例代码分享

作者头像
Hello工控
发布于 2025-06-08 07:45:41
发布于 2025-06-08 07:45:41
10200
代码可运行
举报
文章被收录于专栏:Hello工控Hello工控
运行总次数:0
代码可运行
图片
图片

继上期分享:C++开发MQTT实例代码分享 之后,又有朋友留言:

图片
图片

所以,有求必应哈!!!那么这期就来个Java版本的示例代码。当然,个人本身不熟悉IT这类语言,所以难免有些问题,各位朋友如果发现有问题,请在留言区不吝赐教哈!!!

图片
图片

以下是一个使用Java开发MQTT的完整实例代码,基于Eclipse Paho库实现。

图片
图片

添加Maven依赖

Paho 项目旨在提供可靠开源的开放和标准消息协议实现,适用于机器对机器(M2M)和物联网(IoT)的新、现有和新兴应用。

Eclipse 为使用 Maven 管理依赖项的人托管了一个 Nexus 仓库。发布的库也在 Maven 中央仓库中可用。

首先,将下面的仓库定义和依赖项定义添加到您的 pom.xml 中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<project...>
<repositories>
    <repository>
        <id>Eclipse Paho Repo</id>
        <url>%REPOURL%</url>
    </repository>
</repositories>
...
<dependencies>
    <dependency>
        <groupId>org.eclipse.paho</groupId>
        <artifactId>org.eclipse.paho.client.mqttv3</artifactId>
        <version>%VERSION%</version>
    </dependency>
</dependencies>
</project>

注:用官方发布的版本 https://repo.eclipse.org/content/repositories/paho-releases/ 或者快照版本 https://repo.eclipse.org/content/repositories/paho-snapshots/ 替换 %REPOURL% 。用所需的版本号替换 %VERSION%,例如1.2.1。

如果在发布版本中发现缺少功能或存在错误,您可能希望尝试使用快照版本,看看这是否有所帮助,然后再提出功能请求或问题。具体的参考链接:

  • Paho Java 客户端页面: https://eclipse.org/paho/clients/java/
  • GitHubhttps://github.com/eclipse/paho.mqtt.java
  • 文件帮助页:https://eclipse.dev/paho/files/javadoc/index.html
  • Java 客户端的日志和调试: https://wiki.eclipse.org/Paho/LogandDebugintheJavaclient
图片
图片

MQTT发布者示例代码

下面包含的代码是一个非常基础的示例,发布者示例部分代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

publicclassMqttPublisher {

publicstaticvoidmain(String[] args) {
// 连接参数
Stringbroker="tcp://broker.hivemq.com:1883"; // 公共MQTT代理
StringclientId="JavaPublisher";
Stringtopic="java/mqtt/test";
Stringcontent="Hello from Java MQTT Publisher!";
intqos=2; // 服务质量等级 (0,1,2)

try {
// 1. 创建客户端
MqttClientclient=newMqttClient(broker, clientId, newMemoryPersistence());

// 2. 配置连接选项
MqttConnectOptionsoptions=newMqttConnectOptions();
            options.setCleanSession(true);
            options.setConnectionTimeout(10);
            options.setKeepAliveInterval(20);
// 如需认证可添加:
// options.setUserName("username");
// options.setPassword("password".toCharArray());

// 3. 连接代理
            System.out.println("Connecting to broker: " + broker);
            client.connect(options);
            System.out.println("Connected!");

// 4. 创建消息并设置QoS
MqttMessagemessage=newMqttMessage(content.getBytes());
            message.setQos(qos);
            message.setRetained(true); // 设置保留消息

// 5. 发布消息
            client.publish(topic, message);
            System.out.println("Message published: " + content);

// 6. 断开连接
            client.disconnect();
            System.out.println("Disconnected");

// 7. 关闭客户端
            client.close();

        } catch (MqttException e) {
            e.printStackTrace();
        }
    }
}
图片
图片

订阅者示例代码

订阅者示例部分代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.eclipse.paho.client.mqttv3.*;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

publicclassMqttSubscriberimplementsMqttCallback {

publicstaticvoidmain(String[] args) {
String broker = "tcp://broker.hivemq.com:1883";
String clientId = "JavaSubscriber";
String topic = "java/mqtt/test";
        int qos = 2;

try {
// 1. 创建客户端
MqttClient client = newMqttClient(broker, clientId, newMemoryPersistence());

// 2. 配置回调
            client.setCallback(newMqttSubscriber());

// 3. 连接选项
MqttConnectOptions options = newMqttConnectOptions();
            options.setCleanSession(true);

// 4. 连接代理
System.out.println("Connecting to broker: " + broker);
            client.connect(options);
System.out.println("Connected!");

// 5. 订阅主题
            client.subscribe(topic, qos);
System.out.println("Subscribed to topic: " + topic);
System.out.println("Waiting for messages...");

// 保持程序运行以接收消息
Thread.sleep(Long.MAX_VALUE);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

// 连接丢失回调
@Override
publicvoidconnectionLost(Throwable cause) {
System.out.println("Connection lost! " + cause.getMessage());
    }

// 消息到达回调
@Override
publicvoidmessageArrived(String topic, MqttMessage message) {
System.out.println("\nReceived message:" +
"\n\tTopic: " + topic +
"\n\tQoS: " + message.getQos() +
"\n\tContent: " + newString(message.getPayload()));
    }

// 消息传递完成回调
@Override
publicvoiddeliveryComplete(IMqttDeliveryToken token) {
// 发布者使用的方法,订阅者可忽略
    }
}
图片
图片

常见问题处理

  1. 连接失败:
    • 检查网络是否可访问代理
    • 尝试更换代理地址(如 tcp://test.mosquitto.org:1883
  2. 认证失败:
    • MqttConnectOptions中添加用户名密码
    • 示例:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
options.setUserName("admin");
options.setPassword("password123".toCharArray());

 3.SSL连接:

  • 使用 ssl:// 协议头
  • 添加证书信任配置

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hello工控 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验