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 ...
随机推荐
- scp相关命令总结
scp 跨机远程拷贝scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的.当你服务器硬盘 ...
- Python与常见加密方式
前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错. 将 ...
- 清北学堂模拟赛d4t5 b
分析:一眼树形dp题,就是不会写QAQ.树形dp嘛,定义状态肯定有一维是以i为根的子树,其实这道题只需要这一维就可以了.设f[i]为以i为根的子树中的权值和.先处理子树内部的情况,用一个数组son[i ...
- [bzoj1468][poj1741]Tree[点分治]
可以说是点分治第一题,之前那道的点分治只是模模糊糊,做完这道题感觉清楚了很多,点分治可以理解为每次树的重心(这样会把数分为若干棵子树,子树大小为log级别),然后统计包含重心的整个子树的值减去各个子树 ...
- hdu_1038_Biker's Trip Odometer_201311021643
Biker's Trip Odometer Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...
- 使用Visual Studio Code调试Electron主进程
1.打开VS Code,使用文件->打开,打开程序目录 2.切换到调试选项卡 3.打开launch.json配置文件 4.在“附加到进程”节点上增加localhost配置 5.使用命令行启动el ...
- 027依据前序遍历和中序遍历,重建二叉树(keep it up)
剑指offer中题目:http://ac.jobdu.com/problem.php?pid=1385 题目描写叙述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.如果输入的前序遍历和中 ...
- RxJava资料整理
RxJava资料整理 https://www.jianshu.com/p/e3c4280ce397 http://www.daidingkang.cc/2017/05/19/Rxjava/ http: ...
- [Cypress] Create True end-to-end Tests with Cypress (Smoke test)
Integration tests let us keep our tests fast and reliable. They also allow us to test scenarios that ...
- leetcode第一刷_Minimum Window Substring
好题.字符串.线性时间. 我认为第一次拿到这个题的人应该不会知道该怎么做吧,要么就是我太弱了..先搞清楚这个题要求的是什么.从一个长字符串中找一个字串,这个字串中的字符全然包括了另一个给定目标串中的字 ...