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 ...
随机推荐
- iOS9 中 alertView 的使用
"UIAlertView is deprecated. Use UIAlertController with a preferredStyle of UIAlertControllerSty ...
- 重温分布式系统的CAP理论
1. CAP理论的历史 2000年7月,Eric Brewer教授提出CAP猜想:2年后,Seth Gilbert和Nancy Lynch从理论上证明了CAP:之后,CAP理论正式成为分布式计算领域的 ...
- 使用SpringSecurity
前几天写了一个SpringBoot对拦截器的使用,在实际项目中,对一些情况需要做一些安全验证,比如在没有登录的情况下访问特定的页面应该解释的拦截处理.这一篇介绍使用SpringSecurity来做简单 ...
- OSPF补全计划-1
OSPF全称是啥我就不絮叨了,什么迪杰斯特拉,什么开放最短路径优先算法都是人尽皆知的事儿,尤其是一提算法还会被学数据结构的童鞋鄙视,干脆就不提了,直接开整怎么用吧.(不过好像真有人不知道OSPF里的F ...
- LR逻辑回归文章
http://blog.csdn.net/suipingsp/article/details/41822313
- 蓝桥杯 ——积木问题——C++
问题描述: 小明最近喜欢搭数字积木.一共有10块积木,每个积木上有一个数字,0~9. 搭积木规则: 每个积木放到其它两个积木的上面,并且一定比下面的两个积木数字小. 最后搭成4层的金字塔形,必须用完所 ...
- (Android数据传递)应用之间的交互
一个Android App 通常会有多个Activity.每个Activity的界面都扮演者用户入口的角色,允许用户执行一些特定的任务(例如:查看地图或者拍照等).为了让用户能够从一个Activity ...
- 分金币 [CQOI 2011] [BZOJ 3293]
Description 圆桌上坐着n个人,每人有一定数量的金币,金币总数能被n整除.每个人可以给他左右相邻的人一些金币,最终使得每个人的金币数目相等.你的任务是求出被转手的金币数量的最小值. Inpu ...
- 向json对象中添加数组
// JSONArray jsonArray = new JSONArray();// for (int i = 0; i < list.size(); i++) {// JSONObject ...
- java第二周的学习知识
1.java基本运行单位是类,类的组成成员为成员变量和方法.成员变量的种类有public,default(就是不写),protected,private.public:public可以修饰类,数据成员 ...