MQTT moquette 的Server发布主题

  1. package com.etrip.mqtt.future;
  2. import java.net.URISyntaxException;
  3. import org.fusesource.mqtt.client.FutureConnection;
  4. import org.fusesource.mqtt.client.MQTT;
  5. import org.fusesource.mqtt.client.QoS;
  6. import org.fusesource.mqtt.client.Topic;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. /**
  10. *
  11. *
  12. *
  13. * 采用Future式 发布主题
  14. *
  15. * @author longgangbai
  16. */
  17. public class MQTTFutureServer {
  18. private static final Logger LOG = LoggerFactory.getLogger(MQTTFutureServer.class);
  19. private final static String CONNECTION_STRING = "tcp://192.168.208.46:1883";
  20. private final static boolean CLEAN_START = true;
  21. private final static short KEEP_ALIVE = 30;// 低耗网络,但是又需要及时获取数据,心跳30s
  22. public  static Topic[] topics = {
  23. new Topic("china/beijing", QoS.EXACTLY_ONCE),
  24. new Topic("china/tianjin", QoS.AT_LEAST_ONCE),
  25. new Topic("china/henan", QoS.AT_MOST_ONCE)};
  26. public final  static long RECONNECTION_ATTEMPT_MAX=6;
  27. public final  static long RECONNECTION_DELAY=2000;
  28. public final static int SEND_BUFFER_SIZE=2*1024*1024;//发送最大缓冲为2M
  29. public static void main(String[] args)   {
  30. MQTT mqtt = new MQTT();
  31. try {
  32. //设置服务端的ip
  33. mqtt.setHost(CONNECTION_STRING);
  34. //连接前清空会话信息
  35. mqtt.setCleanSession(CLEAN_START);
  36. //设置重新连接的次数
  37. mqtt.setReconnectAttemptsMax(RECONNECTION_ATTEMPT_MAX);
  38. //设置重连的间隔时间
  39. mqtt.setReconnectDelay(RECONNECTION_DELAY);
  40. //设置心跳时间
  41. mqtt.setKeepAlive(KEEP_ALIVE);
  42. //设置缓冲的大小
  43. mqtt.setSendBufferSize(SEND_BUFFER_SIZE);
  44. //创建连接
  45. final FutureConnection connection= mqtt.futureConnection();
  46. connection.connect();
  47. int count=1;
  48. while(true){
  49. count++;
  50. // 用于发布消息,目前手机段不需要向服务端发送消息
  51. //主题的内容
  52. String message="hello "+count+"chinese people !";
  53. String topic = "china/beijing";
  54. connection.publish(topic, message.getBytes(), QoS.AT_LEAST_ONCE,
  55. false);
  56. System.out.println("MQTTFutureServer.publish Message "+"Topic Title :"+topic+" context :"+message);
  57. }
  58. } catch (URISyntaxException e) {
  59. // TODO Auto-generated catch block
  60. e.printStackTrace();
  61. } catch (Exception e) {
  62. // TODO Auto-generated catch block
  63. e.printStackTrace();
  64. }
  65. }
  66. }

MQTT moquette 的Client接收主题

  1. package com.etrip.mqtt.future;
  2. import java.net.URISyntaxException;
  3. import org.fusesource.mqtt.client.Future;
  4. import org.fusesource.mqtt.client.FutureConnection;
  5. import org.fusesource.mqtt.client.MQTT;
  6. import org.fusesource.mqtt.client.Message;
  7. import org.fusesource.mqtt.client.QoS;
  8. import org.fusesource.mqtt.client.Topic;
  9. import org.slf4j.Logger;
  10. import org.slf4j.LoggerFactory;
  11. /**
  12. *
  13. * MQTT moquette 的Client 段用于订阅主题,并接收主题信息
  14. *
  15. * 采用Future 式 订阅主题
  16. *
  17. * @author longgangbai
  18. */
  19. public class MQTTFutureClient {
  20. private static final Logger LOG = LoggerFactory.getLogger(MQTTFutureClient.class);
  21. private final static String CONNECTION_STRING = "tcp://192.168.208.46:1883";
  22. private final static boolean CLEAN_START = true;
  23. private final static short KEEP_ALIVE = 30;// 低耗网络,但是又需要及时获取数据,心跳30s
  24. private final static String CLIENT_ID = "publishService";
  25. public  static Topic[] topics = {
  26. new Topic("china/beijing", QoS.EXACTLY_ONCE),
  27. new Topic("china/tianjin", QoS.AT_LEAST_ONCE),
  28. new Topic("china/henan", QoS.AT_MOST_ONCE)};
  29. public final  static long RECONNECTION_ATTEMPT_MAX=6;
  30. public final  static long RECONNECTION_DELAY=2000;
  31. public final static int SEND_BUFFER_SIZE=2*1024*1024;//发送最大缓冲为2M
  32. public static void main(String[] args)   {
  33. //创建MQTT对象
  34. MQTT mqtt = new MQTT();
  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. final FutureConnection connection= mqtt.futureConnection();
  50. connection.connect();
  51. connection.subscribe(topics);
  52. while(true){
  53. Future<Message> futrueMessage=connection.receive();
  54. Message message =futrueMessage.await();
  55. System.out.println("MQTTFutureClient.Receive Message "+ "Topic Title :"+message.getTopic()+" context :"+String.valueOf(message.getPayloadBuffer()));
  56. }
  57. } catch (URISyntaxException e) {
  58. // TODO Auto-generated catch block
  59. e.printStackTrace();
  60. } catch (Exception e) {
  61. // TODO Auto-generated catch block
  62. e.printStackTrace();
  63. }finally{
  64. }
  65. }
  66. }

MQTT的学习研究(十二) MQTT moquette 的 Future API 消息发布订阅的实现的更多相关文章

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

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

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

    在MQTT 官网 (http://mqtt.org/software)中有众多MQTT的实现方式.具体参看官网,Moquette是基于Apache Mina 的模型的一个Java MQTT broke ...

  3. python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL

    python3.4学习笔记(十二) python正则表达式的使用,使用pyspider匹配输出带.html结尾的URL实战例子:使用pyspider匹配输出带.html结尾的URL:@config(a ...

  4. Go语言学习笔记十二: 范围(Range)

    Go语言学习笔记十二: 范围(Range) rang这个关键字主要用来遍历数组,切片,通道或Map.在数组和切片中返回索引值,在Map中返回key. 这个特别像python的方式.不过写法上比较怪异使 ...

  5. Tensorflow深度学习之十二:基础图像处理之二

    Tensorflow深度学习之十二:基础图像处理之二 from:https://blog.csdn.net/davincil/article/details/76598474   首先放出原始图像: ...

  6. MQTT的学习研究(十)【转】mosquitto——一个开源的mqtt代理

    MQTT(MQ Telemetry Transport),消息队列遥测传输协议,轻量级的发布/订阅协议,适用于一些条件比较苛刻的环境,进行低带宽.不可靠或间歇性的通信.值得一提的是mqtt提供三种不同 ...

  7. MQTT的学习研究(五) MQTT moquette 的 Blocking API 发布消息服务端使用

    参看官方文档: http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/index.jsp?topic=/com.ibm.mq.amqtat.doc/t ...

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

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

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

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

随机推荐

  1. linux设置开机服务自动启动/关闭自动启动命令

    linux设置开机服务自动启动/关闭自动启动命令 2012-02-06 15:13 [root@localhost ~]# chkconfig --list     显示开机可以自动启动的服务[roo ...

  2. ​网页图表Highcharts实践教程标之加入题副标题版权信息

    ​网页图表Highcharts实践教程标之加入题副标题版权信息 Highcharts辅助元素 辅助元素图表的非必要元素.如标题.版权信息.标签.加载动态.它们不和图表数据发生关联,仅仅是额外说明一些基 ...

  3. 嘿, 你知道吗, 再也不需要for循环了!

    做一个优雅的程序员 JavaScript是一门优雅的语言, 这个'优雅'体验在JS逻辑层次处于高段位的水平, 什么意思呢, 就是一个js应用的主线剧情一定全部是函数式表达的高层可读逻辑, 还是不懂? ...

  4. rufus/scheduler

    之前先在initializers 文件夹下建立了一个task.rb ,rails服务启动的时候执行,本地没问题,可是服务器上启动了3个进程,会执行3遍,解决方法是 把task.rb 放到 script ...

  5. Altium Designer 小记

    SchDoc文件生成Schlib Design-->Make Schematic Library 查看原理图的的器件在PCB里的对应的方法是:tool— Select PCB Compoment ...

  6. ubuntu下配置java环境

    配置JDK环境 下载 登录oracle的网站去下载JDK7 http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads ...

  7. 写给测试人员:不是所有的bug都需要修复

    用户往往对产品中各种各样的bug抱怨不已,而测试人员往往认为自己的职责就是揪出这些所有的bug并把它们全都修复.然而,这是一个误区.微软卓越测试工程总监Alan Page近日撰文,再次解释了有哪些bu ...

  8. [mysql] 随机查询 效率比较

    select primary_count as primaryCount, primary_score as primaryScore, junior_count as juniorCount, ju ...

  9. 释放Ubuntu/Linux系统cache,增加可用内存空间

    某台式机Ubuntu内存共3G,但free的内存只有200M,无法满足scala的jvm需求. 注意用top命令查看才能看到真正的free内存.下面是查看真正内存使用量的另一种命令. watch -n ...

  10. selenium测试(Java)-- 隐式等待(十)

    隐式等待相当于设置全局的等待,在定位元素时,对所有元素设置超时时间. 隐式等待使得WebDriver在查找一个Element或者Element数组时,每隔一段特定的时间就会轮询一次DOM,如果Elem ...