接着上一篇的moquette-mqtt 的使用之broker启动之后,我们需要启动moquette-mqtt 的服务端发布消息。

在moquette-mqtt 的mqtt-client中三种方式实现发布消息的方式:

1.采用阻塞式的连接的(BlockingConnection)

2.采用回调式的连接 (CallbackConnection)

3.采用Future样式的连接(FutureConnection)

本文采用阻塞式作为实验对象。

MQ 遥测传输 (MQTT) 是轻量级基于代理的发布/订阅的消息传输协议,设计思想是开放、简单、轻量、易于实现。
这些特点使它适用于受限环境。例如,但不仅限于此:
             网络代价昂贵,带宽低、不可靠。 
           在嵌入设备中运行,处理器和内存资源有限。
该协议的特点有:
           使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合。 
           对负载内容屏蔽的消息传输。 
           使用 TCP/IP 提供网络连接。 
有三种消息发布服务质量: 
         “至多一次”,消息发布完全依赖底层 TCP/IP 网络。会发生消息丢失或重复。这一级别可用于如下情况,环境传感器数据,丢失一次读记录无所谓,因为不久后还会有第二次发送。 
         “至少一次”,确保消息到达,但消息重复可能会发生。 
          “只有一次”,确保消息到达一次。这一级别可用于如下情况,在计费系统中,消息重复或丢失会导致不正确的结果。 
        小型传输,开销很小(固定长度的头部是 2 字节),协议交换最小化,以降低网络流量。 
        使用 Last Will 和 Testament 特性通知有关各方客户端异常中断的机制。

  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.QoS;
  6. import org.fusesource.mqtt.client.Topic;
  7. import org.slf4j.Logger;
  8. import org.slf4j.LoggerFactory;
  9. /**
  10. *
  11. *
  12. *
  13. * MQTT moquette 的Server  段用于发布主题,并发布主题信息
  14. *
  15. * 采用阻塞式 发布主题
  16. *
  17. * @author longgangbai
  18. */
  19. public class MQTTServer {
  20. private static final Logger LOG = LoggerFactory.getLogger(MQTTServer.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. 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 mqtt = new MQTT();
  33. try {
  34. //设置服务端的ip
  35. mqtt.setHost(CONNECTION_STRING);
  36. //连接前清空会话信息
  37. mqtt.setCleanSession(CLEAN_START);
  38. //设置重新连接的次数
  39. mqtt.setReconnectAttemptsMax(RECONNECTION_ATTEMPT_MAX);
  40. //设置重连的间隔时间
  41. mqtt.setReconnectDelay(RECONNECTION_DELAY);
  42. //设置心跳时间
  43. mqtt.setKeepAlive(KEEP_ALIVE);
  44. //设置缓冲的大小
  45. mqtt.setSendBufferSize(SEND_BUFFER_SIZE);
  46. //创建连接
  47. BlockingConnection connection = mqtt.blockingConnection();
  48. //开始连接
  49. connection.connect();
  50. try {
  51. int count=0;
  52. while(true){
  53. count++;
  54. //订阅的主题
  55. String topic="china/beijing";
  56. //主题的内容
  57. String message="hello "+count+"chinese people !";
  58. connection.publish(topic, message.getBytes(), QoS.AT_LEAST_ONCE, false);
  59. LOG.info("MQTTServer Message  Topic="+topic+"  Content :"+message);
  60. Thread.sleep(2000);
  61. }
  62. } catch (InterruptedException e) {
  63. // TODO Auto-generated catch block
  64. e.printStackTrace();
  65. }
  66. } catch (URISyntaxException e) {
  67. // TODO Auto-generated catch block
  68. e.printStackTrace();
  69. } catch (Exception e) {
  70. // TODO Auto-generated catch block
  71. e.printStackTrace();
  72. }
  73. }
  74. }

下面一篇是关于moquette-mqtt客户端接收信息的文章:

MQTT的学习研究(三)moquette-mqtt 的使用之mqtt服务发布主题信息的更多相关文章

  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的学习研究(四)moquette-mqtt 的使用之mqtt Blocking API客户端订阅并接收主题信息

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

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

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

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

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

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

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

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

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

随机推荐

  1. IPC介绍——10个ipcs例子

    IPC介绍——10个ipcs例子 semaphorearrays2010performancesystemaccess ipcs是一个uinx/linux的命令.用于报告系统的消息队列.信号量.共享内 ...

  2. OpenWRT中的按键和灯的GPIO控制实现

    基于BarrierBreaker版本,基于AR9331 AP121 Demo单板 来进行描述 1.灯 A.在mach-ap121.c中,定义了灯所对应的GPIO定义: #define AP121_GP ...

  3. win8.1 win10存储设备和驱动器分开显示

    win10同理如下: Windows 8.1不仅将资源管理器重命名为文件管理器,还将用户熟悉的“计算机/我的电脑”改名为“这台电脑”,同时还将原先的布局进行了重构,于是用户最终看到的是这样一个界面: ...

  4. redis调优

    1.先把持久化数据备份一份,然后使用rdb分析工具分析一下大的键值2.然后DBA删除一部分不用的3.然后再配置最大内存 千万不要没清理数据就直接把内存限制较小 那样会触发redis对内存达到限制的处理 ...

  5. Entity Framework应用:Code First的实体继承模式

    Entity Framework的Code First模式有三种实体继承模式 1.Table per Type (TPT)继承 2.Table per Class Hierarchy(TPH)继承 3 ...

  6. CodeIgniter(3.1.4)框架中成功/错误跳转

    if ( ! function_exists('error')) { /** * 错误跳转 */ function error($mes, $url) { echo '<script type= ...

  7. 浅谈Log4j和Log4j2的区别

    相信很多程序猿朋友对log4j都很熟悉,log4j可以说是陪伴了绝大多数的朋友开启的编程.我不知道log4j之前是用什么,至少在我的生涯中,是log4j带我开启的日志时代. log4j是Apache的 ...

  8. 配置QQ企业邮箱小结

    https://exmail.qq.com/login 1,注册管理员账号 2,添加域名 3.设置MX记录 记录类型选:MX记录 主机记录(RR):不填(非万网可以填写@) 记录值与MX优先级分别为: ...

  9. json_decode() expects parameter 1 to be string, object given

    $data = Weann\Socialite\Facades\Socialite::driver('wechat')->user();//是字符串 $data=json_encode($dat ...

  10. 支付宝前端开源框架Alice(解决各个浏览器的样式不一致的问题)

    /**************** 网址:https://github.com/sofish/Alice /******************       @charset "utf-8& ...