在上面两篇关于mqtt的broker的启动和mqtt的服务端发布主题信息之后,我们客户端需要订阅相关的信息并接收相关的主题信息。

  1. package com.etrip.mqtt;
  2. import java.net.URISyntaxException;
  3. import org.fusesource.mqtt.client.BlockingConnection;
  4. import org.fusesource.mqtt.client.MQTT;
  5. import org.fusesource.mqtt.client.Message;
  6. import org.fusesource.mqtt.client.QoS;
  7. import org.fusesource.mqtt.client.Topic;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. /**
  11. *
  12. * MQTT moquette 的Client 段用于订阅主题,并接收主题信息
  13. *
  14. * 采用阻塞式 订阅主题
  15. *
  16. * @author longgangbai
  17. */
  18. public class MQTTClient {
  19. private static final Logger LOG = LoggerFactory.getLogger(MQTTClient.class);
  20. private final static String CONNECTION_STRING = "tcp://192.168.208.46:1883";
  21. private final static boolean CLEAN_START = true;
  22. private final static short KEEP_ALIVE = 30;// 低耗网络,但是又需要及时获取数据,心跳30s
  23. private final static String CLIENT_ID = "publishService";
  24. public  static Topic[] topics = {
  25. new Topic("china/beijing", QoS.EXACTLY_ONCE),
  26. new Topic("china/tianjin", QoS.AT_LEAST_ONCE),
  27. new Topic("china/henan", QoS.AT_MOST_ONCE)};
  28. public final  static long RECONNECTION_ATTEMPT_MAX=6;
  29. public final  static long RECONNECTION_DELAY=2000;
  30. public final static int SEND_BUFFER_SIZE=2*1024*1024;//发送最大缓冲为2M
  31. public static void main(String[] args)   {
  32. //创建MQTT对象
  33. MQTT mqtt = new MQTT();
  34. BlockingConnection connection=null;
  35. try {
  36. //设置mqtt broker的ip和端口
  37. mqtt.setHost(CONNECTION_STRING);
  38. //连接前清空会话信息
  39. mqtt.setCleanSession(CLEAN_START);
  40. //设置重新连接的次数
  41. mqtt.setReconnectAttemptsMax(RECONNECTION_ATTEMPT_MAX);
  42. //设置重连的间隔时间
  43. mqtt.setReconnectDelay(RECONNECTION_DELAY);
  44. //设置心跳时间
  45. mqtt.setKeepAlive(KEEP_ALIVE);
  46. //设置缓冲的大小
  47. mqtt.setSendBufferSize(SEND_BUFFER_SIZE);
  48. //获取mqtt的连接对象BlockingConnection
  49. connection = mqtt.blockingConnection();
  50. //MQTT连接的创建
  51. connection.connect();
  52. //创建相关的MQTT 的主题列表
  53. Topic[] topics = {new Topic("china/beijing", QoS.AT_LEAST_ONCE)};
  54. //订阅相关的主题信息
  55. byte[] qoses = connection.subscribe(topics);
  56. //
  57. while(true){
  58. //接收订阅的消息内容
  59. Message message = connection.receive();
  60. //获取订阅的消息内容
  61. byte[] payload = message.getPayload();
  62. // process the message then:
  63. LOG.info("MQTTClient Message  Topic="+message.getTopic()+" Content :"+new String(payload));
  64. //签收消息的回执
  65. message.ack();
  66. Thread.sleep(2000);
  67. }
  68. } catch (URISyntaxException e) {
  69. // TODO Auto-generated catch block
  70. e.printStackTrace();
  71. } catch (Exception e) {
  72. // TODO Auto-generated catch block
  73. e.printStackTrace();
  74. }finally{
  75. try {
  76. connection.disconnect();
  77. } catch (Exception e) {
  78. // TODO Auto-generated catch block
  79. e.printStackTrace();
  80. }
  81. }
  82. }
  83. }

MQTT的学习研究(四)moquette-mqtt 的使用之mqtt Blocking API客户端订阅并接收主题信息的更多相关文章

  1. MQTT的学习研究(八)基于HTTP DELETE MQTT 订阅消息服务端使用

    HTTP DELETE 订阅主题请求协议和响应协议http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau ...

  2. MQTT的学习研究(九)基于HTTP GET MQTT 抓取消息服务端使用

    官方参看文档: HTTP GET 接收主题请求协议和响应协议http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.c ...

  3. MQTT的学习研究(七)基于HTTP POST MQTT 发布消息服务端使用

    参阅官方文档 http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau.doc/ts21220_.htm ...

  4. MQTT的学习研究(十四) MQTT moquette 的 Callback API 消息发布订阅的实现

    在moquette-mqtt中提供了回调callback模式的发布和订阅但是在订阅之后没有发现有消息接收的方法,参看moquette-mqtt中Block,Future式的发布订阅基础是callbac ...

  5. MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现

    MQTT moquette 的Server发布主题 package com.etrip.mqtt.future; import java.net.URISyntaxException; import  ...

  6. MQTT的学习研究(六) MQTT moquette 的 Blocking API 订阅消息客户端使用

    * 使用 Java 为 MQ Telemetry Transport 创建订户 * 在此任务中,您将遵循教程来创建订户应用程序.订户将针对主题创建预订并接收该预订的发布. * 提供了一个示例订户应用程 ...

  7. abp学习(四)——根据入门教程(aspnetMVC Web API进一步学习)

    Introduction With AspNet MVC Web API EntityFramework and AngularJS 地址:https://aspnetboilerplate.com/ ...

  8. MQTT协议学习研究 & Mosquitto简要教程(安装和使用)

    若初次接触MQTT协议,可先理解以下概念: [MQTT协议特点]——相比于RESTful架构的物联网系统,MQTT协议借助消息推送功能,可以更好地实现远程控制. [MQTT协议角色]——在RESTfu ...

  9. MQTT的学习研究(十一) IBM MQTT 简单发布订阅实例

    package com.etrip.push; import com.ibm.mqtt.MqttAdvancedCallback; import com.ibm.mqtt.MqttClient; im ...

随机推荐

  1. spi 总线协议记录

    摘抄至: http://blog.csdn.net/skyflying2012/article/details/11710801 概述: SPI, Serial Perripheral Interfa ...

  2. http://blog.csdn.net/beitiandijun/article/details/41678251

    http://blog.csdn.net/beitiandijun/article/details/41678251

  3. 如何测试Linux 中的wait函数能不能等待子进程的子进程?

    #include <stdio.h> #include <stdlib.h> int main() { pid_t pid = fork(); switch(pid) { : ...

  4. 树形结构 DropDownList

    前台 <asp:DropDownList ID="ddlOutType" runat="server" /> 后台代码: 先绑定第一级 string ...

  5. ASP.NET 防止重复提交提示层

    今天研究了下,其实我希望的很简单,就是有个封装好的提示层,等处理完后,刷新界面时 能自动消失 找了挺久的,找到这个控件还不错 完整Demo地址: http://download.csdn.net/de ...

  6. jQuery的发展史,你知道吗?

    2006年1月,jQuery的第一个版本面世,至今已经有6年多了(注:这个时间点是截止至出书时间).虽然过了这么久,但它依然以其简洁.灵活的编程风格让人一见倾心.在本篇文章中,我们将讲述jQuery的 ...

  7. 用wamp5和ZendOptimizer搭建环境运行Discuz论坛

    用wamp5和ZendOptimizer搭建环境运行Discuz论坛 用wamp5和ZendOptimizer搭建环境运行Discuz论坛 一: 环境:      1:Windows操作系统(Linu ...

  8. jquery -- jquery控制只能输入数字和小数点

    控制文本框只能输入数字是一个很常见的需求,比如电话号码的输入.数量的输入等,这时候就需要我们控制文本框只能输入数字.在用js控制之后在英文输入法的状态下去敲击键盘上的非数字键是输不进去的,然而当你转到 ...

  9. mui.back()返回刷新功能

    使用场景:操作某个步骤需要获取用户信息,如果用户未登陆,则跳转登录页面,登陆成功之后使用mui.back()返回父页面,父页面必须刷新. 子页面:登陆页 父页面:跳转登录页的页面 1. 在子页面初始化 ...

  10. optimization blocks (csapp chapter 5.1)

    p_511 编译器在没有指示下,会做‘ safe optimization',因此有些优化在没有参数的指示下是不会对代码做优化的,故在程序中应该避免某一类代码,因为它们妨碍了编译器做优化. optim ...