JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题

一、前言

        本文我们将介绍Android或JAVA程序作为MQTT客户端连接MQTT服务器并订阅主题报文并发布主题报文,由于我的Android使用的也是JAVA语言,因此下面我们将使用IDEA完成JAVA程序,以实现订阅主题和发布主题的功能,该程序也可在后期移植到Android程序中。

二、程序实现

        打开IDEA新建一个新的标准工程,并创建主程序文件。

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第1张图片

        然后,我们需要导入MQTT的客户端JAR开发包。

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第2张图片

        在Package中导入开发所需JAR包。

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第3张图片

        随后按下图将开发包添加至依赖使用。

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第4张图片

        随后,我们完善程序代码:

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第5张图片

        根据上图的补全信息提示,我们的构造方法共有三个参数,分别是服务器地址、客户端ID、MqttClientPersistence对象。因此我们根据信息补全代码完成初始化。

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第6张图片

        补全后我们对其进行异常捕捉,后续操作均在try{}函数中完成。

        我们启动连接,在提示信息中,我们可以看到两种连接方法,第二种连接方法需要一个配置类的对象,由于此处我们无需用户名等任何配置,仅做测试,因此我们选择第一种连接方式。

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第7张图片

        我们设置回调函数,并订阅测试主题,在回调函数中将收到的报文打印出来。

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第8张图片

        此时,我们打开MQTTBox测试软件,连接上公共服务器,并发送主题为“mqtt_230919”的测试报文,看能否在程序中打印出来。

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第9张图片

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第10张图片

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第11张图片

        可以看出,我们此处已经打印出测试的报文信息,说明我们成功订阅了相关主题。

        随后,我们进行发布操作,实现自己发布自己订阅的测试功能。

        完成代码后运行,看能否实现预期效果。

JAVA&Android实现MQTT上位机软件功能-订阅主题与发布主题_第12张图片

        可以看到打印出了相关信息,证明程序功能实现。

三、源代码

        以下内容为Java代码,便于大家移植Android工程,但要注意,实现耗时操作需要使用多线程技术。


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

public class Main {

    public static void main(String[] args) {
        try {
            MqttClient mqttClient=new MqttClient("tcp://broker.emqx.io:1883","new-client",new MemoryPersistence());
            mqttClient.connect();
            mqttClient.setCallback(new MqttCallback() {
                @Override
                public void connectionLost(Throwable throwable) {
                    //连接丢失
                }

                @Override
                public void messageArrived(String s, MqttMessage mqttMessage) throws Exception {
                    //接收到信息
                    System.out.println(new String(mqttMessage.getPayload()));
                }

                @Override
                public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) {
                    //交付完成
                }
            });
            mqttClient.subscribe("mqtt_230919");//订阅报文

            MqttMessage mqttMessage=new MqttMessage();//创建报文对象
            mqttMessage.setPayload("test_payload".getBytes());//封装报文信息
            mqttClient.publish("mqtt_230919",mqttMessage);//发布报文

        } catch (MqttException e) {
            throw new RuntimeException(e);
        }
    }
}

你可能感兴趣的:(嵌入式工程师开发,java,android,开发语言)