一、前言
本文我们将介绍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);
}
}
}