1、搭建好MQTT服务器,可以参考EMQX企业版试用笔记_Three Big Stones的博客-CSDN博客
2、Eclipse下新建一个Maven项目,并引入mqtt客户端java版本包。
<dependency>
<groupId>org.eclipse.paho</groupId>
<artifactId>org.eclipse.paho.client.mqttv3</artifactId>
<version>1.2.2</version>
</dependency>
3、新建Main入口函数类,编写以下代码:
public static void main( String[] args )
{
String subTopic="test/a";
String pubTopic="test/b";
String content = "hello java";
int qos=1;
String broker="ws://192.168.145.172:8083";
String clientId="mqttx_2011a483";
MemoryPersistence persistence = new MemoryPersistence();
try
{
MqttClient client = new MqttClient(broker,clientId,persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setUserName("test");
connOpts.setPassword("123456".toCharArray());
connOpts.setCleanSession(true);
//设置回调
client.setCallback(new OnMessageCallback());
//建立连接
System.out.println("Connecting to broker:"+broker);
client.connect(connOpts);
//订阅
client.subscribe(subTopic);
//发布消息
MqttMessage message = new MqttMessage(content.getBytes());
message.setQos(qos);
client.publish(pubTopic, message);
System.out.println("Message published");
// client.disconnect();
// System.out.println("Disconnected");
// client.close();
// System.exit(0);
}catch(MqttException me)
{
System.out.println("reason "+me.getReasonCode());
System.out.println("msg "+me.getMessage());
System.out.println("loc "+me.getLocalizedMessage());
System.out.println("cause "+me.getCause());
System.out.println("excep "+me);
me.printStackTrace();
}
System.out.println( "Hello World!" );
}
注意:broker地址要用ws协议,使用官方的demo一致连接不上,换成ws就好了。
4、新建回调类,接收订阅主题的消息
package com.ppx.HelloWorld;
import org.eclipse.paho.client.mqttv3.IMqttDeliveryToken;
import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttMessage;
public class OnMessageCallback implements MqttCallback {
public void connectionLost(Throwable cause) {
// TODO Auto-generated method stub
System.out.println("连接断开,可以坐重连!");
}
public void messageArrived(String topic, MqttMessage message) throws Exception {
// TODO Auto-generated method stub
System.out.println("接收消息主题:"+topic);
System.out.println("接收消息Qos:"+message.getQos());
System.out.println("接收消息内容:"+new String(message.getPayload()));
}
public void deliveryComplete(IMqttDeliveryToken token) {
// TODO Auto-generated method stub
System.out.println("deliveryComplete---------" + token.isComplete());
}
}
5、启动java程序,并在MQTT在线客户端,地址:Easy-to-Use Online MQTT Client | Try Now给主题/test/a发布一个消息。
6、在java客户端查看是否收到消息。
说明java客户端能正常收到消息。
扫描二维码关注公众号,回复:
14479321 查看本文章