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 ...
随机推荐
- Python与常见加密方式
前言 我们所说的加密方式,都是对二进制编码的格式进行加密的,对应到Python中,则是我们的Bytes. 所以当我们在Python中进行加密操作的时候,要确保我们操作的是Bytes,否则就会报错. 将 ...
- 【codeforces 792C】Divide by Three
[题目链接]:http://codeforces.com/contest/792/problem/C [题意] 让你删掉最少的数字使得剩下的数字%3==0 [题解] 看代码..内置题解了现在. [完整 ...
- 【codeforces 508A】Pasha and Pixels
[题目链接]:http://codeforces.com/contest/508/problem/A [题意] 让你在一个n*m的方格上给方格染色; 顺序给出染色的k个格子 如果在某一时刻 有一个2* ...
- Linux下几种文件传输命令
Linux下几种文件传输命令 sz rz sftp scp 最近在部署系统时接触了一些文件传输命令,分别做一下简单记录: 1.sftp Secure Ftp 是一个基于SSH安全协议的文件传输管理工具 ...
- Leetcode 30.与所有单词相关联的子串
与所有单词相关联的字串 给定一个字符串 s 和一些长度相同的单词 words.在 s 中找出可以恰好串联 words 中所有单词的子串的起始位置. 注意子串要与 words 中的单词完全匹配,中间不能 ...
- RSAROLL
题目:http://www.shiyanbar.com/ctf/1918 # -*- coding: utf-8 -*- import gmpy2 ciper = [704796792, 752211 ...
- 洛谷 P3078 [USACO13MAR]扑克牌型Poker Hands
P3078 [USACO13MAR]扑克牌型Poker Hands 题目描述 Bessie and her friends are playing a unique version of poker ...
- Tomcat类载入器机制(Tomcat源代码解析六)
要说Tomcat的Classloader机制,我们还得从Bootstrap開始.在BootStrap初始化的时候.调用了org.apache.catalina.startup.Bootstrap#in ...
- [Angulalr] Speed Up Reducer Development Using Ngrx Schematics
When we use NGRX, we need to create some bolipates. Now with Angulalr6, we can use CLI to generate t ...
- 反射调用android系统级API函数
try { Class<?> mClass = Class.forName("com.android.server.wifi.WifiSettingsStore"); ...