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

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

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

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

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

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

补全后我们对其进行异常捕捉,后续操作均在try{}函数中完成。
我们启动连接,在提示信息中,我们可以看到两种连接方法,第二种连接方法需要一个配置类的对象,由于此处我们无需用户名等任何配置,仅做测试,因此我们选择第一种连接方式。

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

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



可以看出,我们此处已经打印出测试的报文信息,说明我们成功订阅了相关主题。
随后,我们进行发布操作,实现自己发布自己订阅的测试功能。

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

可以看到打印出了相关信息,证明程序功能实现。
三、源代码
以下内容为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);
        }
    }
}



















