mqtt-client回调方法简介
mqtt-client回调方法简介
毫无疑问Callback方式是最复杂的一种,但是其也是能够提供更好的服务,因此有必要好好研究,下面就是对使用回调方式的简单介绍:
一、在使用回调方式前,先通过MQTT获取回调连接:
MQTT mqtt=new MQTT();
//此处省略设置MQTT的属性
CallbackConnection connection=mqtt.callbackConnection();
二、调用CallbackConnection的方法实现业务逻辑:
1、connect(连接方法):
connection.connect(new Callback<Void>() {
public void onSuccess(Void arg0) {
//进入该方法表示连接成功连接成功
}
public void onFailure(Throwable value) {
//进入该方法表示连接失败
}
});
一般可以在connect的onSuccess方法中发布或者订阅相应的主题,在其onFailure方法中作相应的断开连接等操作
2、listener(监听方法):
connection.listener(new Listener() {
@Override
public void onPublish(UTF8Buffer topicmsg, Buffer msg, Runnable ack) {
//utf-8 is used for dealing with the garbled
//String topic = topicmsg.utf8().toString();
//String payload = msg.utf8().toString();
//表示监听成功
ack.run();
}
@Override
public void onFailure(Throwable value) {
//表示监听失败
}
//execute only once when connection is ended
@Override
public void onDisconnected() {
/表示监听到断开连接
}
//execute only once when connecting started
@Override
public void onConnected() {
//表示监听到连接成功
}
});
onPublish表示成功,可以获取到订阅的主题和订阅的内容(UTF8Buffer topicmsg表示订阅的主题, Buffer msg表示订阅的类容),一般的可以在这个方法中获取到订阅的主题和内容然后进行相应的判断和其他业务逻辑操作;
onFailure表示监听失败,这里可以调用相应的断开连接等方法;
onConnected表示监听到连接建立,该方法只在建立连接成功时执行一次,表示连接成功建立,如果有必要可以在该方法中进行相应的订阅操作;
onDisconnected表示监听到连接断开,该方法只在断开连接时执行一次,如有必要可以进行相应的资源回收操作。
3、subscribe(订阅方法):
connection.subscribe(topics, new Callback<byte[]>() {
@Override
public void onSuccess(byte[] qoses) {
//主题订阅成功
}
@Override
public void onFailure(Throwable value) {
//状态主题订阅失败
}
});
onSuccess方法表示订阅成功,onFailure方法表示订阅失败;方法中Topic[] topics表示定于的主题数组,注意只有在改方法订阅的主题,才能够在监听方法中接收到。
4、publish(发布主题方法):
connection.publish(topic, payload.getBytes(), qos, retain, new Callback<Void>() {
@Override
public void onSuccess(Void arg0) {
//表示发布主题成功
}
@Override
public void onFailure(Throwable throwable) {
//表示发布主题失败
}
});
publish方法用于发布响应的主题,以便订阅者订阅;onSuccess表示发布成功,onFailure表示发布失败。
5、disconnect(断开连接方法):
connection.disconnect(new Callback<Void>() {
@Override
public void onSuccess(Void arg0) {
//与服务器断开连接成功
}
@Override
public void onFailure(Throwable arg0) {
//与服务器断开连接失败
}
});
disconnect表示断开与代理服务器的连接,调用该方法后只是表示断开连接但是实际的connect依然存在并没有为null,再次调用connect方法又能够连接成功。
注意:
1、在上面的五个方法中一般先调用connect和listener方法
2、回调将执行与连接相关联的调度队列,以便可以安全使用从回调的连接,但你绝不能在回调中执行任何阻塞操作,否则会改变执行的顺序,这样可能出错。如果可能存在阻塞时,最好是在连接的调度队列中执行另外一个线程:
connection.getDispatchQueue().execute(new Runnable() {
public void run() {
//在这里进行相应的订阅、发布、停止连接等等操作
}
});
mqtt-client回调方法简介的更多相关文章
- go ---MQTT client
Paho GO Client 语言 GO 协议 EPL AND EDL 官网地址 http://www.eclipse.org/paho/ API类型 Asynchronous 描述 Paho ...
- mqtt client api: 阻塞API
fusesource版本:mqtt-client-1.11.jar下载地址:https://github.com/fusesource/mqtt-client fusesource提供三种mqtt c ...
- Mqtt paho 回调函数触发机制跟踪
Python Mqtt paho 回调函数触发机制跟踪,我使用的是 buildroot 里面的 mqtt paho , 代码在 ''' buildroot-2017.02.8/output/build ...
- Java回调方法详解
回调在维基百科中定义为: 在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用. 其目的是允许底层代码调用在高层定义的子程序. 举个例子可能更明白一些:以Androi ...
- jQuery的AJAX方法简介及与其他文件$符号冲突的解决办法
一.重要的jQuery AJAX方法简介 $.load(url) 从服务器载入数据 $.get(url,callback) 从服务器请求数据,并执行回调函数 $.post(url,data,callb ...
- java回调方法之理解
以前经常看见"回调方法(或回调函数)"一词,但是没有了解过是什么意思,更不知道用法.现在从网络上搜集了一些很好的资料,自己又整理一下,作为自己的笔记,也作为学习过程中的一个小脚印. ...
- MQTT事件回调流程
TLS 如下强调: 1.每个IOT设备应该有一对独有的公钥/私钥 2.SERVER的认证通过SERVER的"root certificate" SSL产生过程: $ openssl ...
- mqtt client python example
This is a simple example showing how to use the [Paho MQTT Python client](https://eclipse.org/paho/c ...
- java回调方法、钩子方法以及模板方法模式
在面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象,其处理事件的方法叫做回调方法.(摘自百度百科) 那么通过上面那句话将百度百科中的&qu ...
随机推荐
- 查看Linux中自带的jdk ,设置JAVA_HOME
在配置hadoop是,进行格式化hadoop的时候,出现找不到jdk 我用centos7是64位的, 发现本机有java ,就找了一下其位置 找到了jdk-1.7.0_75 which java [r ...
- 【codeforces 510B】Fox And Two Dots
[题目链接]:http://codeforces.com/contest/510/problem/B [题意] 让你在一个二维的方格里面找环; 两个点有相邻的边它们才是相连的; 有环YES,没环NO ...
- play snake on windows
今天和人吃晚饭突然想起来 之前西佳佳老师说小学期会要求两星期撸一个小游戏 有人已经撸完一个俄罗斯方块了... 菜逼我决定从最简单的贪吃蛇玩起... 我是直接参考的这个博客 算是相当简单而且很Low的实 ...
- JavaSE 学习笔记之package包(十一)
包:定义包用package关键字. 1:对类文件进行分类管理. 2:给类文件提供多层名称空间. 如果生成的包不在当前目录下,需要最好执行classpath,将包所在父目录定义到classpath变量中 ...
- C++成员函数实现在类定义中与在类定义外的区别(Windows下直接使用g++)
c++ 类的成员函数放在类的外面来实现的写法,探究一下. 原文: http://www.cnblogs.com/findumars/p/6143375.html ------------------- ...
- 2.5-冗余VLAN
2.5-冗余VLAN High-Availability(AH) First hop routers on the LAN redundancy Network/首跳冗余网络(出口第一个网络) ...
- Atitit. C# java 的api 文件夹封装结构映射总结
Atitit. C# java 的api 文件夹封装结构映射总结 C# java ref System.Reflection System.Type. java.lang.ref concurren ...
- 【POJ 3740】 Easy Finding
[题目链接] http://poj.org/problem?id=3740 [算法] Dancing Links算法解精确覆盖问题 详见这篇文章 : https://www.cnblogs.com/g ...
- B1202 [HNOI2005]狡猾的商人 并查集
其实就是并查集的题.维护一个前缀和,然后用并查集维护前缀和,每次判断是否合理就行了. 题干: Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了 ...
- Java数据库编程及Java XML解析技术
1.JDBC概述 A. 什么是JDBC? Java DataBase Connectivity:是一种用于执行SQL语句的Java API,它由一组用Java语言编写的类和接口组成.通过这些类和接口 ...