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(); } } } }
点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Java日期时间API系列31

  时间戳是指格林威治时间1970年01月01日00时00分00秒起至现在的总毫秒数,是所有时间的基础,其他时间可以通过时间戳转换得到。Java中本来已经有相关获取时间戳的方法,Java8后增加新的类Instant等专用于处理时间戳问题。 1获取时间戳的方法和性能对比1.1获取时间戳方法Java8以前

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Java日期时间API系列35

  通过Java日期时间API系列1Jdk7及以前的日期时间类(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cnblogs.com%2Fxkzhangsanx%2Fp%2F12032719.html)中得知,Java8以前除了java.sql.Timestamp扩充