代码:

package cc.gongchang.mqtt;

import java.net.URISyntaxException;

import org.fusesource.hawtdispatch.Dispatch;
import org.fusesource.mqtt.client.Future;
import org.fusesource.mqtt.client.FutureConnection;
import org.fusesource.mqtt.client.MQTT;
import org.fusesource.mqtt.client.Message;
import org.fusesource.mqtt.client.QoS;
import org.fusesource.mqtt.client.Topic; import com.alibaba.fastjson.JSONObject; /**
* Hello world!
*
*/
public class App {
public static void main(String[] args) {
MQTT mqtt = new MQTT();
// MQTT设置说明
// 设置主机号
try {
mqtt.setHost("tcp://sgdzpic.3322.org:1883");
} catch (URISyntaxException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 用于设置客户端会话的ID。在setCleanSession(false);被调用时,MQTT服务器利用该ID获得相应的会话。此ID应少于23个字符,默认根据本机地址、端口和时间自动生成
mqtt.setClientId("876543210");
// 若设为false,MQTT服务器将持久化客户端会话的主体订阅和ACK位置,默认为true
mqtt.setCleanSession(false);
// 定义客户端传来消息的最大时间间隔秒数,服务器可以据此判断与客户端的连接是否已经断开,从而避免TCP/IP超时的长时间等待
mqtt.setKeepAlive((short) 60);
// 服务器认证用户名
mqtt.setUserName("admin");
// 服务器认证密码
mqtt.setPassword("123456");
// 设置“遗嘱”消息的话题,若客户端与服务器之间的连接意外中断,服务器将发布客户端的“遗嘱”消息
mqtt.setWillTopic("willTopic");
// 设置“遗嘱”消息的内容,默认是长度为零的消息
mqtt.setWillMessage("willMessage");
// 设置“遗嘱”消息的QoS,默认为QoS.ATMOSTONCE
mqtt.setWillQos(QoS.AT_LEAST_ONCE);
// 若想要在发布“遗嘱”消息时拥有retain选项,则为true
mqtt.setWillRetain(true);
// 设置版本
mqtt.setVersion("3.1.1");
// 失败重连接设置说明
// 客户端首次连接到服务器时,连接的最大重试次数,超出该次数客户端将返回错误。-1意为无重试上限,默认为-1
mqtt.setConnectAttemptsMax(10L);
// 客户端已经连接到服务器,但因某种原因连接断开时的最大重试次数,超出该次数客户端将返回错误。-1意为无重试上限,默认为-1
mqtt.setReconnectAttemptsMax(3L);
// 首次重连接间隔毫秒数,默认为10ms
mqtt.setReconnectDelay(10L);
// 重连接间隔毫秒数,默认为30000ms
mqtt.setReconnectDelayMax(30000L);
// 设置重连接指数回归。设置为1则停用指数回归,默认为2
mqtt.setReconnectBackOffMultiplier(2); // Socket设置说明
// 设置socket接收缓冲区大小,默认为65536(64k)
mqtt.setReceiveBufferSize(65536);
// 设置socket发送缓冲区大小,默认为65536(64k)
mqtt.setSendBufferSize(65536);
// 设置发送数据包头的流量类型或服务类型字段,默认为8,意为吞吐量最大化传输
mqtt.setTrafficClass(8); // 带宽限制设置说明
// 设置连接的最大接收速率,单位为bytes/s。默认为0,即无限制
mqtt.setMaxReadRate(0);
// 设置连接的最大发送速率,单位为bytes/s。默认为0,即无限制
mqtt.setMaxWriteRate(0); Boolean contition = true;
while (contition) {
// 选择消息分发队列
// 若没有调用方法setDispatchQueue,客户端将为连接新建一个队列。如果想实现多个连接使用公用的队列,显式地指定队列是一个非常方便的实现方法
mqtt.setDispatchQueue(Dispatch.createQueue("foo"));
FutureConnection connection = mqtt.futureConnection();
Future<Void> f1 = connection.connect();
try {
f1.await();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// 订阅消息
Future<byte[]> f2 = connection.subscribe(new Topic[] {
new Topic("person/blacklist/#", QoS.AT_LEAST_ONCE) });
//
try {
byte[] qoses = f2.await();
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} // 发送身份验证消息.
// Future<Void> f3 = connection.publish("foo", "Hello".getBytes(),
// QoS.AT_LEAST_ONCE, false);
// 接收订阅消息..
Future<Message> receive = connection.receive();
// 打印消息.
Message message = null;
try {
message = receive.await();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String subscribeInfo = String.valueOf(message.getPayloadBuffer());
if(subscribeInfo.startsWith("ascii")) {
JSONObject subscribeObject = JSONObject.parseObject(subscribeInfo.substring(7));
System.out.println(subscribeInfo);
System.out.println(subscribeObject.get("name"));//姓名,对应name
System.out.println(subscribeObject.get("certifiedNo"));//身份证,对应identityId
System.out.println(subscribeObject.get("url"));//图片地址,对应imageUrl
//还需要传送tarLibSerial
//入库黑名单
}
// 回应
message.ack();
//
Future<Void> f4 = connection.disconnect();
try {
f4.await();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} }
}

  

java mqtt的更多相关文章

  1. Java MQTT 客户端之 Paho

    Paho 自动重连后订阅的主题会清空,所以需要实现 MqttCallbackExtended 接口,在 connectComplete 方法添加订阅主题:而不是实现 MqttCallback 接口 一 ...

  2. 物联网MQTT协议分析和开源Mosquitto部署验证

    在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定 ...

  3. MQTT研究之EMQ:【EMQ之HTTP认证/访问控制】

    今天进行验证的逻辑是EMQ的http的Auth以及ACL的逻辑. 首先,参照HTTP插件认证配置的说明文档进行基本的配置, 我的配置内容如下: ##-------------------------- ...

  4. MQTT的学习研究(十六) MQTT的Mosquitto的window安装部署

    在mqtt的官方网站,有许多mqtt,其中:MosquittoAn Open Source MQTT server with C, C++, Python and Javascript clients ...

  5. MQTT的学习研究(二)moquette-mqtt 的使用之mqtt broker的启动

    在MQTT 官网 (http://mqtt.org/software)中有众多MQTT的实现方式.具体参看官网,Moquette是基于Apache Mina 的模型的一个Java MQTT broke ...

  6. 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表

    1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...

  7. 采用MQTT协议实现android消息推送(1)MQTT 协议简介

    1.资料 mqtt官网 http://mqtt.org/ 服务端程序列表 https://github.com/mqtt/mqtt.github.io/wiki/servers 客户端库列表 http ...

  8. 物联网时代-跟着Thingsboard学IOT架构-MQTT设备协议

    Thingsboard的MQTT设备协议 thingsboard官网: https://thingsboard.io/ thingsboard GitHub: https://github.com/t ...

  9. Netty实现高性能IOT服务器(Groza)之精尽代码篇中

    运行环境: JDK 8+ Maven 3.0+ Redis 技术栈: SpringBoot 2.0+ Redis (Lettuce客户端,RedisTemplate模板方法) Netty 4.1+ M ...

随机推荐

  1. 【python】常用第三方模块

    No1: [Pillow]图像处理标准库 缩放 from PIL import Image # 打开一个jpg图像文件,注意是当前路径: im = Image.open('test.jpg') # 获 ...

  2. Certbot让网站拥有免费https证书

    网站使用http协议,在chrome浏览器中总是报不安全,看着就让人不爽,自己建的网站,不安全总是会让自己心慌慌.看到有头有脸的网站都是https开头,心中自然也想装逼一把,让自己的网站高端大气上档次 ...

  3. LR特征维数特别大实时计算问题

    美团 https://tech.meituan.com/machinelearning-data-feature-process.html 维数灾难 待续...

  4. 【Intellij IDEA】eclipse项目导入

    intellij idea中文资料网上比较少,对于eclipse的项目如何导入intellij idea也没有完整的说明,本人在这里整理下,方便更多人加入到intellij idea的阵容里. 直接上 ...

  5. No compiler is provided in this environment.Perhaps you are running on a JRE rather than a JDK?报错解决

    Maven install 时出现如上错误. Eclipse-->Window-->preferences-->Java-->Installed JREs 查看jdk: 发现此 ...

  6. ajax 浏览网页等待页面

  7. (转)HashMap底层实现原理/HashMap与HashTable区别/HashMap与HashSet区别

    ①HashMap的工作原理 HashMap基于hashing原理,我们通过put()和get()方法储存和获取对象.当我们将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算h ...

  8. C++学习笔记45:多态性

    运算符重载 运算符是针对新类型数据的实际需要,对原有运算符进行适当的改造 1.比如使复数类的对象可以使用+运算符实现加法: 2.比如使时钟类的对象可以用++运算符实现时间增加1秒: 注意:可以重载为类 ...

  9. CF 1033 D. Divisors

    D. Divisors http://codeforces.com/contest/1033/problem/D 题意: 给n个(n<=500)个数,($a_i <= 2 \times 1 ...

  10. 让公式在网页传播——mathJAX

    让公式在网页传播--mathJAX 对于学生党而言,写公式最好的工具是LaTeX,但LaTeX把公式展示到互联网上就有些困难,而使用截图又不太雅观.幸运的是,mathJAX引擎可以在浏览器中解析渲染数 ...