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


    接着上一篇的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 特性通知有关各方客户端异常中断的机制。

    Java代码  收藏代码
    1. package com.etrip.mqtt;  
    2.   
    3. import java.net.URISyntaxException;  
    4.   
    5. import org.fusesource.mqtt.client.BlockingConnection;  
    6. import org.fusesource.mqtt.client.MQTT;  
    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.  *  
    14.  *  
    15.      
    16.  * MQTT moquette 的Server  段用于发布主题,并发布主题信息 
    17.  *  
    18.  * 采用阻塞式 发布主题  
    19.  *  
    20.  * @author longgangbai 
    21.  */  
    22. public class MQTTServer {  
    23.         private static final Logger LOG = LoggerFactory.getLogger(MQTTServer.class);  
    24.         private final static String CONNECTION_STRING = "tcp://192.168.208.46:1883";  
    25.         private final static boolean CLEAN_START = true;  
    26.         private final static short KEEP_ALIVE = 30;// 低耗网络,但是又需要及时获取数据,心跳30s  
    27.         public  static Topic[] topics = {  
    28.                         new Topic("china/beijing", QoS.EXACTLY_ONCE),  
    29.                         new Topic("china/tianjin", QoS.AT_LEAST_ONCE),  
    30.                         new Topic("china/henan", QoS.AT_MOST_ONCE)};  
    31.         public final  static long RECONNECTION_ATTEMPT_MAX=6;  
    32.         public final  static long RECONNECTION_DELAY=2000;  
    33.           
    34.         public final static int SEND_BUFFER_SIZE=2*1024*1024;//发送最大缓冲为2M  
    35.         public static void main(String[] args)   {  
    36.             MQTT mqtt = new MQTT();  
    37.             try {  
    38.                 //设置服务端的ip  
    39.                 mqtt.setHost(CONNECTION_STRING);  
    40.                 //连接前清空会话信息  
    41.                 mqtt.setCleanSession(CLEAN_START);  
    42.                 //设置重新连接的次数  
    43.                 mqtt.setReconnectAttemptsMax(RECONNECTION_ATTEMPT_MAX);  
    44.                 //设置重连的间隔时间  
    45.                 mqtt.setReconnectDelay(RECONNECTION_DELAY);  
    46.                 //设置心跳时间  
    47.                 mqtt.setKeepAlive(KEEP_ALIVE);  
    48.                 //设置缓冲的大小  
    49.                 mqtt.setSendBufferSize(SEND_BUFFER_SIZE);  
    50.       
    51.                 //创建连接   
    52.                 BlockingConnection connection = mqtt.blockingConnection();  
    53.                 //开始连接  
    54.                 connection.connect();  
    55.                 try {  
    56.                     int count=0;  
    57.                     while(true){  
    58.                         count++;  
    59.                         //订阅的主题  
    60.                         String topic="china/beijing";  
    61.                         //主题的内容  
    62.                         String message="hello "+count+"chinese people !";  
    63.                         connection.publish(topic, message.getBytes(), QoS.AT_LEAST_ONCE, false);  
    64.                         LOG.info("MQTTServer Message  Topic="+topic+"  Content :"+message);  
    65.                         Thread.sleep(2000);  
    66.                     }  
    67.                 } catch (InterruptedException e) {  
    68.                     // TODO Auto-generated catch block  
    69.                     e.printStackTrace();  
    70.                 }  
    71.             } catch (URISyntaxException e) {  
    72.                 // TODO Auto-generated catch block  
    73.                 e.printStackTrace();  
    74.             } catch (Exception e) {  
    75.                 // TODO Auto-generated catch block  
    76.                 e.printStackTrace();  
    77.             }  
    78.         }  
    79. }  

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

  • 相关阅读:
    使用Eclipse调试Java程序的10个技巧
    向mysql中插入格式为"yyyyMMdd HH:mm:ss"的时间
    乐观锁和悲观锁
    js验证表单大全
    subclipse版本回滚功能
    (转)Linux(RedHat AS4)下架设subversion(svn)服务器
    Redhat5下安装Apache2与Subversion1.6.15
    (转)深入探讨 Java 类加载器
    (转)Java深度历险(一)——Java字节代码的操纵
    关于SVN 目录结构
  • 原文地址:https://www.cnblogs.com/yudar/p/4613729.html
Copyright © 2020-2023  润新知