接着上一篇的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. CentOS5.4安装redmine详细步骤

    >>>>概述<<<< 这里不解释什么是redmine及用来做什么,如果不知道用来做什么,估计也不会把它安装到CentOS5.4上.哈哈…… 以下为详细的 ...

  2. Userdata

    我们首先关心的是如何在Lua中表示数组的值.Lua为这种情况提供专门提供一个基本的类型:userdata.一个userdatum提供了一个在Lua中没有预定义操作的raw内存区域. Lua API提供 ...

  3. 【Mac双系统设置系统默认启动系统】解决方式

    解决方式1: 开机时长按option键,进入系统选择界面: 用左右方向键选择到你要设置为默认启动的盘, 然后同一时候按下ctrl+enter键.就可以将其设置为默认启动的系统. 解决方式2: 选择ma ...

  4. mysql修改密码与password字段不存在mysqladmin connect to server at localhost failed

    mysqladmin: connect to server at 'localhost' failed 停止mysql服务 systemctl stop mysql 安全模式启动 chown -R m ...

  5. 实现字符串转化为整数函数atoi()函数

    函数原型: int atoi(const char *nptr); 函数说明: 参数nptr字符串,如果第一个非空格字符存在,并且,如果不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数 ...

  6. Wordpress搭建社交型小游戏网站10大步骤

    http://www.aliyun.com/zixun/content/2_8_196141.html ———————————————————————————————————————————————— ...

  7. 上手并过渡到PHP7(1)——基于Homestead的PHP7和XDdebug环境

    PHP7 up and running 泊学实操视频泊学原文链接PHP7, Xdebug and Homestead 在经历了13个RC版本之后,PHP 7终于来了.在我们上手评估PHP 7的新特性之 ...

  8. 简单十招提高jQuery执行效率

    1. 使用最新版本的jQuery jQuery的版本更新很快,你应该总是使用最新的版本.因为新版本会改进性能,还有很多新功能. 下面就来看看,不同版本的jQuery性能差异有多大.这里是三条最常见的j ...

  9. mysql 异常 Lock wait timeout exceeded; try restarting transaction;expc=java.sql.SQLExcept

    这种一般是等锁超时了,可以设置延长等锁时间. mysql> set innodb_lock_wait_timeout=100 Query OK, 0 rows affected (0.02 se ...

  10. C# 基础小知识之yield 关键字

    对于yield关键字我们首先看一下msdn的解释: 如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法.运算符或 get 访问器是迭代器. 通过使用 yield 定义迭代器,可在实现自 ...