MQTT的学习研究(四)moquette-mqtt 的使用之mqtt Blocking API客户端订阅并接收主题信息
在上面两篇关于mqtt的broker的启动和mqtt的服务端发布主题信息之后,我们客户端需要订阅相关的信息并接收相关的主题信息。
- package com.etrip.mqtt;
- import java.net.URISyntaxException;
- import org.fusesource.mqtt.client.BlockingConnection;
- 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 org.slf4j.Logger;
- import org.slf4j.LoggerFactory;
- /**
- *
- * MQTT moquette 的Client 段用于订阅主题,并接收主题信息
- *
- * 采用阻塞式 订阅主题
- *
- * @author longgangbai
- */
- public class MQTTClient {
- private static final Logger LOG = LoggerFactory.getLogger(MQTTClient.class);
- private final static String CONNECTION_STRING = "tcp://192.168.208.46:1883";
- private final static boolean CLEAN_START = true;
- private final static short KEEP_ALIVE = 30;// 低耗网络,但是又需要及时获取数据,心跳30s
- private final static String CLIENT_ID = "publishService";
- public static Topic[] topics = {
- new Topic("china/beijing", QoS.EXACTLY_ONCE),
- new Topic("china/tianjin", QoS.AT_LEAST_ONCE),
- new Topic("china/henan", QoS.AT_MOST_ONCE)};
- public final static long RECONNECTION_ATTEMPT_MAX=6;
- public final static long RECONNECTION_DELAY=2000;
- public final static int SEND_BUFFER_SIZE=2*1024*1024;//发送最大缓冲为2M
- public static void main(String[] args) {
- //创建MQTT对象
- MQTT mqtt = new MQTT();
- BlockingConnection connection=null;
- try {
- //设置mqtt broker的ip和端口
- mqtt.setHost(CONNECTION_STRING);
- //连接前清空会话信息
- mqtt.setCleanSession(CLEAN_START);
- //设置重新连接的次数
- mqtt.setReconnectAttemptsMax(RECONNECTION_ATTEMPT_MAX);
- //设置重连的间隔时间
- mqtt.setReconnectDelay(RECONNECTION_DELAY);
- //设置心跳时间
- mqtt.setKeepAlive(KEEP_ALIVE);
- //设置缓冲的大小
- mqtt.setSendBufferSize(SEND_BUFFER_SIZE);
- //获取mqtt的连接对象BlockingConnection
- connection = mqtt.blockingConnection();
- //MQTT连接的创建
- connection.connect();
- //创建相关的MQTT 的主题列表
- Topic[] topics = {new Topic("china/beijing", QoS.AT_LEAST_ONCE)};
- //订阅相关的主题信息
- byte[] qoses = connection.subscribe(topics);
- //
- while(true){
- //接收订阅的消息内容
- Message message = connection.receive();
- //获取订阅的消息内容
- byte[] payload = message.getPayload();
- // process the message then:
- LOG.info("MQTTClient Message Topic="+message.getTopic()+" Content :"+new String(payload));
- //签收消息的回执
- message.ack();
- Thread.sleep(2000);
- }
- } catch (URISyntaxException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }finally{
- try {
- connection.disconnect();
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }
MQTT的学习研究(四)moquette-mqtt 的使用之mqtt Blocking API客户端订阅并接收主题信息的更多相关文章
- MQTT的学习研究(八)基于HTTP DELETE MQTT 订阅消息服务端使用
HTTP DELETE 订阅主题请求协议和响应协议http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau ...
- MQTT的学习研究(九)基于HTTP GET MQTT 抓取消息服务端使用
官方参看文档: HTTP GET 接收主题请求协议和响应协议http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.c ...
- MQTT的学习研究(七)基于HTTP POST MQTT 发布消息服务端使用
参阅官方文档 http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau.doc/ts21220_.htm ...
- MQTT的学习研究(十四) MQTT moquette 的 Callback API 消息发布订阅的实现
在moquette-mqtt中提供了回调callback模式的发布和订阅但是在订阅之后没有发现有消息接收的方法,参看moquette-mqtt中Block,Future式的发布订阅基础是callbac ...
- MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现
MQTT moquette 的Server发布主题 package com.etrip.mqtt.future; import java.net.URISyntaxException; import ...
- MQTT的学习研究(六) MQTT moquette 的 Blocking API 订阅消息客户端使用
* 使用 Java 为 MQ Telemetry Transport 创建订户 * 在此任务中,您将遵循教程来创建订户应用程序.订户将针对主题创建预订并接收该预订的发布. * 提供了一个示例订户应用程 ...
- abp学习(四)——根据入门教程(aspnetMVC Web API进一步学习)
Introduction With AspNet MVC Web API EntityFramework and AngularJS 地址:https://aspnetboilerplate.com/ ...
- MQTT协议学习研究 & Mosquitto简要教程(安装和使用)
若初次接触MQTT协议,可先理解以下概念: [MQTT协议特点]——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制. [MQTT协议角色]——在RESTfu ...
- MQTT的学习研究(十一) IBM MQTT 简单发布订阅实例
package com.etrip.push; import com.ibm.mqtt.MqttAdvancedCallback; import com.ibm.mqtt.MqttClient; im ...
随机推荐
- linux_UAPI_转
转自:Linux Kernel UAPI 问题描述 从3.5开始,Linux Kernel 里多了一个 uapi 文件夹,里面放了很多 Linux Kernel 各个模块的头文件.如果是第一次碰到,可 ...
- java执行jar包
一般运行包含manifest的jar包,可以使用 java -jar <jar-file-name>.jar 如果jar里没有 manifest,则可以使用 java -cp foo.ja ...
- Spark Streaming中的操作函数讲解
Spark Streaming中的操作函数讲解 根据根据Spark官方文档中的描述,在Spark Streaming应用中,一个DStream对象可以调用多种操作,主要分为以下几类 Transform ...
- thinkphp 3.2
---恢复内容开始--- http://url.cn/ejCVUQ ---恢复内容结束---
- selenium测试(Java)--执行JS(十八)
1. 操作滚动条 package com.test.js; import org.openqa.selenium.By; import org.openqa.selenium.Dimension; ...
- 科技发烧友之3d吉米投影
http://item.jd.com/1558081.html?r=1434635270480#comment 暴风199的墨镜
- (转)引用---FFMPEG解码过程
视频播放过程 首先简单介绍以下视频文件的相关知识.我们平时看到的视频文件有许多格式,比如 avi, mkv, rmvb, mov, mp4等等,这些被称为容器(Container), 不同的容器格式规 ...
- python不同package下相互调用
路径如: /path/dir1/a.py /path/dir2/b.py 调用举例如: 在/path/dir2/b.py中调用 a模块 import sys sys.path.append(" ...
- u3d调用自己的dll
原文地址:http://blog.sina.com.cn/s/blog_62f7cb730100zhhf.html 首先用vc建立一个dll工程 然后在里面建立一个testunity.h文件.内容如下 ...
- Spring-更多DI的知识
3.3.1 延迟初始化Bean 延迟初始化也叫做惰性初始化,指不提前初始化Bean,而是只有在真正使用时才创建及初始化Bean. 配置方式很简单只需在<bean>标签上指定 “lazy-i ...