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回调方法简介的更多相关文章

  1. go ---MQTT client

    Paho GO Client   语言 GO 协议 EPL AND EDL 官网地址 http://www.eclipse.org/paho/ API类型 Asynchronous  描述 Paho ...

  2. mqtt client api: 阻塞API

    fusesource版本:mqtt-client-1.11.jar下载地址:https://github.com/fusesource/mqtt-client fusesource提供三种mqtt c ...

  3. Mqtt paho 回调函数触发机制跟踪

    Python Mqtt paho 回调函数触发机制跟踪,我使用的是 buildroot 里面的 mqtt paho , 代码在 ''' buildroot-2017.02.8/output/build ...

  4. Java回调方法详解

    回调在维基百科中定义为: 在计算机程序设计中,回调函数,是指通过函数参数传递到其他代码的,某一块可执行代码的引用. 其目的是允许底层代码调用在高层定义的子程序. 举个例子可能更明白一些:以Androi ...

  5. jQuery的AJAX方法简介及与其他文件$符号冲突的解决办法

    一.重要的jQuery AJAX方法简介 $.load(url) 从服务器载入数据 $.get(url,callback) 从服务器请求数据,并执行回调函数 $.post(url,data,callb ...

  6. java回调方法之理解

    以前经常看见"回调方法(或回调函数)"一词,但是没有了解过是什么意思,更不知道用法.现在从网络上搜集了一些很好的资料,自己又整理一下,作为自己的笔记,也作为学习过程中的一个小脚印. ...

  7. MQTT事件回调流程

    TLS 如下强调: 1.每个IOT设备应该有一对独有的公钥/私钥 2.SERVER的认证通过SERVER的"root certificate" SSL产生过程: $ openssl ...

  8. mqtt client python example

    This is a simple example showing how to use the [Paho MQTT Python client](https://eclipse.org/paho/c ...

  9. java回调方法、钩子方法以及模板方法模式

    在面向对象的语言中,回调则是通过接口或抽象类来实现的,我们把实现这种接口的类称为回调类,回调类的对象称为回调对象,其处理事件的方法叫做回调方法.(摘自百度百科) 那么通过上面那句话将百度百科中的&qu ...

随机推荐

  1. (41)Spring Boot 使用Java代码创建Bean并注册到Spring中【从零开始学Spring Boot】

    已经好久没有讲一些基础的知识了,这一小节来点简单的,这也是为下节的在Spring Boot中使用多数据源做准备. 从Spring 3.0开始,增加了一种新的途径来配置Bean Definition,这 ...

  2. noip模拟赛 同余方程组

    分析:这道题一个一个枚举都能有70分...... 前60分可以用中国剩余定理搞一搞.然而并没有枚举分数高......考虑怎么省去不必要的枚举,每次跳都只跳a的倍数,这样对前面的式子没有影响,为了使得这 ...

  3. hdu 4941 stl的map<node,int>用法

    #include<iostream> #include<cstdio> #include<cstring> #include<map> using na ...

  4. [bzoj3702/2212][Poi2011]二叉树/Tree Rotations_线段树

    二叉树 Tree Rotations bzoj-3702 bzoj-2212 Poi-2011 题目大意:现在有一棵二叉树,所有非叶子节点都有两个孩子.在每个叶子节点上有一个权值(有n个叶子节点,满足 ...

  5. [转]十五天精通WCF——第三天 client如何知道server提供的功能清单

     通常我们去大保健的时候,都会找姑娘问一下这里能提供什么服务,什么价格,这时候可能姑娘会跟你口述一些服务或者提供一份服务清单,这样的话大 家就可以做到童嫂无欺,这样一份活生生的例子,在wcf中同样是一 ...

  6. HDU 4525

    也是水题了,不过注意负负也可以为正就好了. 今天看见bestcoder上的人那么厉害,唉,我什么时候才能赶上啊.. #include <iostream> #include <cst ...

  7. 【转】shell中的内建命令, 函数和外部命令

    原文:http://www.cnblogs.com/xkfz007/archive/2011/10/13/2209571.html linux命令有内部命令和外部命令之分.内部命令实际上是shell程 ...

  8. luogu2152 [SDOI2009]SuperGCD

    要你求两个非常大的数字的GCD. 不要想复杂,用高精度整更相减损术即可. #include <cstdio> #include <cstring> #include <a ...

  9. elasticsearch 分页查询实现方案——Top K+归并排序

    elasticsearch 分页查询实现方案 1. from+size 实现分页 from表示从第几行开始,size表示查询多少条文档.from默认为0,size默认为10,注意:size的大小不能超 ...

  10. SVM中的线性分类器

    线性分类器: 首先给出一个非常非常简单的分类问题(线性可分),我们要用一条直线,将下图中黑色的点和白色的点分开,很显然,图上的这条直线就是我们要求的直线之一(可以有无数条这样的直线)     假如说, ...