Java 中使用 MQTT

MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 ,可在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输。它凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山。

Java实现MQTT通信 - ioufev - 博客园 (cnblogs.com)

本文主要介绍如何在 Java 项目中使用 MQTT,实现客户端与服务器的连接、订阅和收发消息等功能。

引入客户端库
本文的开发环境为:

构建工具:Gradle
IDE:IntelliJ IDEA
Java 版本:JDK 11

本文将使用 Eclipse Paho Java Client 作为客户端,该客户端是 Java 语言中使用最为广泛的 MQTT 客户端库。

1.添加以下依赖到项目 build.gradle 文件中。

// https://mvnrepository.com/artifact/org.eclipse.paho/org.eclipse.paho.client.mqttv3
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'

本文将使用 EMQX 提供的 免费公共 MQTT 服务器,该服务基于 EMQX 的 MQTT 云平台 创建。服务器接入信息如下:

  • Broker: broker.emqx.io(中国用户可以使用 broker-cn.emqx.io
  • TCP Port: 1883
  • SSL/TLS Port: 8883

如果要使用自签名证书进行 TLS/SSL 连接,需添加 bcpkix-jdk15on 到 build.gradle文件。

// https://mvnrepository.com/artifact/org.bouncycastle/bcpkix-jdk15on
implementation 'org.bouncycastle:bcpkix-jdk15on:1.70'

如何在 Java 中使用 MQTT | EMQ (emqx.com)

2.创建一个SubscribeSample类,代码如下:(我的理解这个相当于消费者吧,其实就是消息接收方)

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

public class SubscribeSample {
    public static void main(String[] args) {
        String broker = "tcp://broker.emqx.io:1883";
        String topic = "asdfsdfa";
        String clientid = "subscribe_client";
        int qos = 0;

        try {
            MqttClient client = new MqttClient(broker, clientid, new MemoryPersistence());
            // 连接参数
            MqttConnectOptions options = new MqttConnectOptions();
            options.setConnectionTimeout(60);
            options.setKeepAliveInterval(60);
            // 设置回调
            client.setCallback(new MqttCallback() {

                public void connectionLost(Throwable cause) {
                    System.out.println("connectionLost: " + cause.getMessage());
                }

                public void messageArrived(String topic, MqttMessage message) {
                    System.out.println("topic: " + topic);
                    System.out.println("Qos: " + message.getQos());
                    System.out.println("message content: " + new String(message.getPayload()));
                }

                public void deliveryComplete(IMqttDeliveryToken token) {
                    System.out.println("deliveryComplete---------" + token.isComplete());
                }

            });
            client.connect(options);
            client.subscribe(topic, qos);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

3.创建一个PublishSample类,代码如下:(我的理解这个相当于生产者吧,消息产生方)

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;

public class PublishSample {

    public static void main(String[] args) {

        String broker = "tcp://broker.emqx.io:1883";
        String topic = "asdfsdfa";
        String clientid = "publish_clien";
        String content = "各位好!";
        int qos = 0;

        try {
            MqttClient client = new MqttClient(broker, clientid, new MemoryPersistence());
            // 连接参数
            MqttConnectOptions options = new MqttConnectOptions();
            options.setConnectionTimeout(60);
            options.setKeepAliveInterval(60);
            // 连接
            client.connect(options);
            // 创建消息并设置 QoS
            MqttMessage message = new MqttMessage(content.getBytes());
            message.setQos(qos);
            // 发布消息
            client.publish(topic, message);
            System.out.println("Message published");
            System.out.println("topic: " + topic);
            System.out.println("message content: " + content);
            // 关闭连接
            client.disconnect();
            // 关闭客户端
            client.close();
        } catch (MqttException e) {
            throw new RuntimeException(e);
        }
    }
}

结果:

Java可以使用Eclipse Paho MQTT客户端库来实现MQTT协议的通信。下面是使用Paho MQTT实现MQTT协议的基本步骤: 1. 添加依赖库:在Java项目添加以下依赖库 ``` <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.5</version> </dependency> ``` 2. 创建MQTT客户端:使用MqttClient类创建MQTT客户端实例,指定MQTT服务器地址和端口号。 ``` String broker = "tcp://localhost:1883"; //MQTT服务器地址和端口号 String clientId = "JavaMqttClient"; //客户端ID MqttClient mqttClient = new MqttClient(broker, clientId); ``` 3. 连接MQTT服务器:使用MqttClient类的connect方法连接MQTT服务器。 ``` MqttConnectOptions connOpts = new MqttConnectOptions(); connOpts.setCleanSession(true); //清除会话 mqttClient.connect(connOpts); ``` 4. 发布消息:使用MqttClient类的publish方法发布MQTT消息。 ``` String topic = "test/topic"; //主题 String content = "Hello, MQTT!"; //消息内容 int qos = 0; //服务质量 mqttClient.publish(topic, new MqttMessage(content.getBytes()), qos); ``` 5. 订阅主题:使用MqttClient类的subscribe方法订阅MQTT主题。 ``` String topic = "test/topic"; //主题 int qos = 0; //服务质量 mqttClient.subscribe(topic, qos); ``` 6. 处理MQTT消息:使用MqttClient类的setCallback方法设置MQTT消息的回调函数。 ``` mqttClient.setCallback(new MqttCallback() { @Override public void connectionLost(Throwable cause) { //连接丢失 } @Override public void messageArrived(String topic, MqttMessage message) throws Exception { //收到消息 } @Override public void deliveryComplete(IMqttDeliveryToken token) { //消息发送完成 } }); ``` 以上是使用Java实现MQTT协议的基本步骤,通过这些步骤可以实现MQTT客户端的连接、发布消息、订阅主题、处理消息等功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值