您好,欢迎访问沃航(武汉)科技有限公司官方网站
java开发mqtt客户端程序
2017-11-02 17:00:00

在目前所有的推送技术中,mqtt无疑是目前最主流的协议了,其优越性在于它的协议消耗非常的少,对于网络性能不是特别对的好的系统来说,mqtt无疑可以保证其推送的高效性,之前小沃曾经有过关于html5技术实现mqtt的案例详解,但是由于一些原因,有些时候并不是要求客户一定要打开浏览器才能实现,而是要客户只要运行后台程序就需要实现。因此,除了html5,小沃最近也研究出了一套后台连接mqtt服务器的方式。所使用的语言也是目前最为流行的java程序。

做到这一步,首先需要引入相关的库文件。这里我们使用mqtt官方推荐的org.eclipse.paho.client.mqttv3.jar库,最新版本是1.2.0版本。

这里我们要建立一个MqttClient类,其构造函数为new MqttClient(broker, clientId, persistence)。broker为类似"tcp://0.0.0.0:1883"这样的字符串,clientId就不多解释了,persistence只需要通过new创建一个新的方法即可。

还需要一个MqttConnectOptions类,这个类用于配置各种与mqtt相关的参数,在最后的MqttClient.connect(),作为参数送进去。

其中一个比较重要的参数是MqttCallback,它是接收到数据的回调类,用这个可以实现执行特定的消息处理函数。

好了,废话不多说,直接上代码。

package cn.worldflying.mqtt;

import org.eclipse.paho.client.mqttv3.MqttCallback;
import org.eclipse.paho.client.mqttv3.MqttClient;
import org.eclipse.paho.client.mqttv3.MqttConnectOptions;
import org.eclipse.paho.client.mqttv3.MqttException;
import org.eclipse.paho.client.mqttv3.MqttMessage;
import org.eclipse.paho.client.mqttv3.persist.MemoryPersistence;

public class Mqtt {
	private MqttClient client;
	
	public Mqtt(String broker, String topic, String clientId, String username, String password, MqttCallback mqttcallback) {
		try {
			MemoryPersistence persistence = new MemoryPersistence();
			client = new MqttClient(broker, clientId, persistence);
			MqttConnectOptions opt = new MqttConnectOptions();
			opt.setCleanSession(true);
			opt.setConnectionTimeout(10);
			opt.setKeepAliveInterval(20);
			if(username != null) opt.setUserName(username);
			if(password != null) opt.setPassword(password.toCharArray());
			client.setCallback(mqttcallback);
			System.out.println("Connecting to broker: "+broker);
			client.connect(opt);
			client.subscribe(topic, 2); 
			System.out.println("Connected");
        } 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();
        }
	}
	
	public int Public(String topic, String content) {
        int qos = 2;
            System.out.println("Publishing message: "+content);
            MqttMessage message = new MqttMessage(content.getBytes());
            message.setQos(qos);
            try {
				client.publish(topic, message);
			} catch (MqttException me) {
				// TODO Auto-generated catch block
	            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("Message published");
        return 0;
	}
	
	public int Disconnect() {
		try {
			client.disconnect();
		} catch (MqttException me) {
			// TODO Auto-generated catch block
            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();
		}
		return 0;
	}
	
}


联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn