使用java开发MQTT客户端接收消息

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客户端能正常收到消息。 

猜你喜欢

转载自blog.csdn.net/dandingwangzi/article/details/125945932