mqtt+java开发_java开发mqtt客户端程序_沃航科技

在目前所有的推送技术中,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;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值