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

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

Java代码  

  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. }
时间: 2024-08-03 05:49:29

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.doc/ts21240_.htm 请求响应头各个字段的含义的讲解http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau.doc/ts21250_.htm 响应错误处理http://publib.boul

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

官方参看文档: HTTP GET 接收主题请求协议和响应协议http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau.doc/ts21230_.htm HTTP POST 发布主题请求协议和响应协议http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau.doc/ts21220_.htm HTTP DELETE

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

参阅官方文档 http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzau.doc/ts21220_.htm HTTP POST puts a message to a queue, or a publication to a topic. The HTTPPOST Java sample is an example an HTTP POST request of a message to a queue.

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

在moquette-mqtt中提供了回调callback模式的发布和订阅但是在订阅之后没有发现有消息接收的方法,参看moquette-mqtt中Block,Future式的发布订阅基础是callback式订阅发布,但是本人在研究源代码测试,发现 callback方式接收没有成功.所以本文中只是callback式的发布和订阅没有消息接收的过程,尚未查到原因. 采用Callback式 发布主题 Java代码   package com.etrip.mqtt.callback; import java

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

MQTT moquette 的Server发布主题 Java代码   package com.etrip.mqtt.future; import java.net.URISyntaxException; import org.fusesource.mqtt.client.FutureConnection; import org.fusesource.mqtt.client.MQTT; import org.fusesource.mqtt.client.QoS; import org.fuseso

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

* 使用 Java 为 MQ Telemetry Transport 创建订户 * 在此任务中,您将遵循教程来创建订户应用程序.订户将针对主题创建预订并接收该预订的发布. * 提供了一个示例订户应用程序 Subscribe.Subscribe 将创建预订主题 MQTT Examples,并等待获 * 得该预订的发布,等待时间为 30 秒.订户可以创建预订并等待获得发布.它还可以接收发送至先前 * 为同一客户机标识创建的预订的发布. * MqttConnectionOptions.cleanSes

MQTT的学习研究(二)moquette-mqtt 的使用之mqtt broker的启动

在MQTT 官网 (http://mqtt.org/software)中有众多MQTT的实现方式.具体参看官网,Moquette是基于Apache Mina 的模型的一个Java MQTT broker.使用过Mina的同学发现其实broker的启动过程就是一个Mina应用的启动. 在MQTT moquette 中采用MINA作为底层消息的传递方式  本类的目的启动MQTT moquette Broker 的方式,本文的源代码来自  moquette-broker-0.1-jar-with-de

MQTT的学习研究(三)moquette-mqtt 的使用之mqtt服务发布主题信息

接着上一篇的moquette-mqtt 的使用之broker启动之后,我们需要启动moquette-mqtt 的服务端发布消息. 在moquette-mqtt 的mqtt-client中三种方式实现发布消息的方式: 1.采用阻塞式的连接的(BlockingConnection) 2.采用回调式的连接 (CallbackConnection) 3.采用Future样式的连接(FutureConnection) 本文采用阻塞式作为实验对象. MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅

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

package com.etrip.push; import com.ibm.mqtt.MqttAdvancedCallback; import com.ibm.mqtt.MqttClient; import com.ibm.mqtt.MqttException; import com.ibm.mqtt.MqttSimpleCallback; /** * Android推送方案分析(MQTT/XMPP/GCM) 方案1. 使用GCM服务(Google Cloud Messaging) 简介:Go