java mqtt
代码:
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的更多相关文章
- Java MQTT 客户端之 Paho
Paho 自动重连后订阅的主题会清空,所以需要实现 MqttCallbackExtended 接口,在 connectComplete 方法添加订阅主题:而不是实现 MqttCallback 接口 一 ...
- 物联网MQTT协议分析和开源Mosquitto部署验证
在<物联网核心协议—消息推送技术演进>一文中已向读者介绍了多种消息推送技术的情况,包括HTTP单向通信.Ajax轮询.Websocket.MQTT.CoAP等,其中MQTT协议为IBM制定 ...
- MQTT研究之EMQ:【EMQ之HTTP认证/访问控制】
今天进行验证的逻辑是EMQ的http的Auth以及ACL的逻辑. 首先,参照HTTP插件认证配置的说明文档进行基本的配置, 我的配置内容如下: ##-------------------------- ...
- MQTT的学习研究(十六) MQTT的Mosquitto的window安装部署
在mqtt的官方网站,有许多mqtt,其中:MosquittoAn Open Source MQTT server with C, C++, Python and Javascript clients ...
- MQTT的学习研究(二)moquette-mqtt 的使用之mqtt broker的启动
在MQTT 官网 (http://mqtt.org/software)中有众多MQTT的实现方式.具体参看官网,Moquette是基于Apache Mina 的模型的一个Java MQTT broke ...
- 采用MQTT协议实现android消息推送(2)MQTT服务端与客户端软件对比、android客户端示列表
1.服务端软件对比 https://github.com/mqtt/mqtt.github.io/wiki/servers 名称(点名进官网) 特性 简介 收费 支持的客户端语言 IBM MQ 完整的 ...
- 采用MQTT协议实现android消息推送(1)MQTT 协议简介
1.资料 mqtt官网 http://mqtt.org/ 服务端程序列表 https://github.com/mqtt/mqtt.github.io/wiki/servers 客户端库列表 http ...
- 物联网时代-跟着Thingsboard学IOT架构-MQTT设备协议
Thingsboard的MQTT设备协议 thingsboard官网: https://thingsboard.io/ thingsboard GitHub: https://github.com/t ...
- Netty实现高性能IOT服务器(Groza)之精尽代码篇中
运行环境: JDK 8+ Maven 3.0+ Redis 技术栈: SpringBoot 2.0+ Redis (Lettuce客户端,RedisTemplate模板方法) Netty 4.1+ M ...
随机推荐
- jupyter notebook不能选择虚拟环境的解决方法
今天使用dlib没有py37版本,因此创建了Version_36虚拟环境.但jupyter notebook默认的内核找不到新建的虚拟环境,解决方法是需要安装两个包: × ipykernel × nb ...
- Ubuntu ssh-keygen 生成公钥并添加到远程服务器上
1. 在本地生成公钥, ssh-keygen -t RSA -b 800 2. cd /root/.ssh 3. ssh-copy-id -i id_rsa.pub 远程服务器IP 这一步需要输入远 ...
- 从零搭建 ES 搜索服务(四)拼音搜索
一.前言 上篇介绍了 ES 的同义词搜索,使我们的搜索更强大了,然而这还远远不够,在实际使用中还可能希望搜索「fanqie」能将包含「番茄」的结果也罗列出来,这就涉及到拼音搜索了,本篇将介绍如何具体实 ...
- 译:为什么使用 NoSQL 数据库
原文链接:Why NoSQL Database? 向数据时代的转变正在推动 NoSQL 随着各行各业朝着数据时代转变,商业世界正在经历巨大的变革.这是由互联网以及其他二十一世纪新技术--云计算.移动应 ...
- spring 启动异常Failed to read candidate component class
Exception in thread "main" org.springframework.beans.factory.BeanDefinitionStoreException: ...
- luogu P2962 [USACO09NOV]灯Lights 高斯消元
目录 题目链接 题解 题目链接 luogu P2962 [USACO09NOV]灯Lights 题解 可以折半搜索 map合并 复杂度 2^(n / 2)*logn 高斯消元后得到每个点的翻转状态 爆 ...
- [ZOJ1482]Partitions
[ZOJ1482]Partitions 题目大意: 给定一个\(n\times n(n\le3000)\)的\(\texttt 0/\texttt1\)矩阵,求去掉所有的\(1\)以后,矩阵被分成几个 ...
- Django session 源码流程
流程 Django session源码流程 首先执行的是SessionMiddleware的init方法 import_module(settings.SESSION_ENGINE) 导入了一个 dj ...
- [Python]网络爬虫( 连载:大牛汪海 )
汪海个人博客:http://blog.callmewhy.com/ Python爬虫专栏,汪海专栏 Python爬虫入门教程 简单的介绍如何使用Python的相关模块如urllib2来实现网络爬虫的基 ...
- day7接口开发
一.数据库操作, 1.创建游标时指定游标类型为字典,返回值类型为字典,方便取值 cur = coon.cursor(cursor=pymysql.cursor.Dictursor) 2.获取执行查询S ...