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. Winform重画ComboBox背景色

    //返回hWnd参数所指定的窗口的设备环境. [System.Runtime.InteropServices.DllImport("user32.dll")] static ext ...

  2. GPU硬件加速原理 /转

    现代浏览器大都可以利用GPU来加速页面渲染.每个人都痴迷于60桢每秒的顺滑动画.在GPU的众多特性之中,它可以存储一定数量的纹理(一个矩形的像素点集合)并且高效地操作这些纹理(比如进行特定的移动.缩放 ...

  3. js学习笔记15----子节点和兄弟节点的操作

    1.元素.firstChild : 只读属性,第一个子节点 标准下:会包含文本类型的子节点. 非标准下:只包含元素类型子节点. 元素.firstElementChild : 只读属性,第一个元素子节点 ...

  4. DataGridView基本操作

    1.获得某个(指定的)单元格的值:dataGridView1.Row[i].Cells[j].Value;2.获得选中的总行数:dataGridView1.SelectedRows.Count;3.获 ...

  5. android EditText设置光标、边框和图标,以及限制输入

    控制边框形状,先在drawable中建一个xml文件:shape.xml <?xml version="1.0" encoding="utf-8"?> ...

  6. 7 款基于 JavaScript/AJAX 的文件上传插件

    本文整理了7款基于JavaScript和AJAX的文件上传插件,这些插件基本上都能实现以下功能: 多文件上传 拖拽操作 实时上传进度 自定义上传限制 希望能为你的开发工作带来帮助. 1.  jQuer ...

  7. 上传图片(示列分析) $_FILES

    新建一个think_photo数据库,库里用sql CREATE TABLE IF NOT EXISTS `think_photo` ( `id` ) NOT NULL AUTO_INCREMENT, ...

  8. 关于Cocos2d-x属性和引用

    在HelloScene.h文件里面的Private定义一个Size类型的变量visibleSize,然后在HelloScene.cpp里面引用HelloScene.h,再在HelloScene::in ...

  9. e644. 处理Action事件

    Action events are fired by subclasses of AbstractButton and includes buttons, checkboxes, and menus. ...

  10. RequireJS使用小结1——for Effective JavaScript Module Loading

    1. require和define的区别 The require() function is used to run immediate functionalities, while define() ...