• Mosquitto搭建Android推送服务(二)Mosquitto简介及搭建


    文章钢要:

    1、了解Mosquitto服务器

    2、在Liunx中搭建Mosquitto服务器

    3、设置Mosquitto集群 

    一、Mosquitto简介

    一款实现了消息推送协议 MQTT v3.1 的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备。一个典型的应用案例就是 Andy Stanford-ClarkMosquitto(MQTT协议创始人之一)在家中实现的远程监控和自动化。并在 OggCamp 的演讲上,对MQTT协议进行详细阐述。

    Mosquitto管网:http://mosquitto.org/ 

    Mosquitto最新的源码:http://mosquitto.org/files/source/ 

    二、Liunx下安装Mosquitto

    在windows下安装比较简单,在windows环境下需要先下载安装Cygwin,安装成功后在管网下载Mosquitto.exe之后点击安装即可。圆子里有很多教程讲解,就不阐述了。并且在实际开发环境中使用windows环境在少数,大部分使用Liunx,因此下面介绍下在Liunx下安装Mosquitto。

    Liunx下安装Mosquitto方法有2中,下载安装包到本地安装以及yum安装。推荐用yum安装因为比较方便,如果安装失败再考虑使用压缩包安装。

    使用yum安装:

    1、默认情况下Mosquitto的安装需要OpenSSL的支持,所以先安装OpenSSL

    yum install gcc gcc-c++

    yum install openssl-devel

    yum install c-ares-devel

    yum install libuuid-devel

    yum install wget

    yum install cmake

    yum install build-essential python quilt devscripts python-setuptools python3 

    yum install libssl-dev libc-ares-dev uuid-dev daemon openssl-devel

    在安装过程中如果服务器已经安装过上述软件程序,将不会在安装,如果发现新版本或者未安装会提示更新和安装,用户输入‘Y’确认安装即可。

    2、下载并编译安装mosquitto

    下载压缩包(截止目前2016-11最新的压缩包是1.4.10):

    wget http://mosquitto.org/files/source/mosquitto-1.4.9.tar.gz

    解压:

    tar -xzvf mosquitto-1.4.9.tar.gz

    进入目录并安装:

    cd mosquitto-1.4.9 

    make 

    make install
     
     
    3、配置mosquitto.conf文件 

    整个目录中最重要的文件就是mosquitto.conf,将其复制到ect下面

    cp mosquitto.conf /etc/mosquitto

    修改mosquitto.conf文件

    cd /etc/mosquitto/

    使用vi命令打开mosquitto.conf文件

    vi mosquitto.conf

    按“↓”移动光标,找到Extra listeners下的

    (可以使用“/Extra listeners”来查找文本,按“N”键可以继续超找。按“I”键进入编辑状态,按ESC返回。退出是键入“:wq”保存退出。不保存强制退出“:q!”)

    服务的端口号

    #port 1883 改为 port 1883 

    最大连接数,-1表示不限制

    #max_connections -1 改为 max_connections -1 

    因为我的登录用户是root,所以这里使用root

    #use_username_as_clientid 改为 user root 

    4、启动Mosquitto服务器

    执行

    mosquitto -c /etc/mosquitto/mosquitto.conf

    在启动的时候会出现报错的情况,执行mosquitto客户端程序时出现找不到动态库:libmosquitto.so.1

    错误信息:./mosquitto_sub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

    解决方案,执行命令:

    sudo ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

    和 ldconfig 即可.

    如果显示如下提示说明启动成功,警告不用管。

    技术分享

    5、测试服务器订阅与发布

    订阅服务:

    mosquitto_sub -t HelloWord

    mosquitto_sub 订阅命令

    -t 订阅主题

    Helloworld 主题名称,可以随便取名

    发布服务:

    mosquitto_pub -t HelloWord -h localhost -m "Hello Word"

    mosquitto_pub 发布命令

    -t 发布主题

    Helloworld 主题名称

    -h 主机地址

    localhost 发布到本地,如果远程主机直接写ip地址(不用写端口号)

    -m 发布的信息

    “Hello world” 发布的内容

    如果一切顺,应当如下图所示,可以成功订阅一条信息,并且可以成功发布信息,订阅端可以接受到信息。

    技术分享

     三、Mosquitto的分布式集群部署

    如果需要做并发量很大的时候就需要考虑做集群处理,但是我在查找资料的时候发现并不多,所以整理了一下,搭建简单的Mosquitto集群模式。

    首先集群需要2台以上的Mosquitto服务器。安装方式同上。

    先了解下Mosquitto集群模式的逻辑图,如下:

    可以看出,无论在那台服务器中订阅了信息,无论在那台服务器上发布信息,订阅者都可以收到发布的信息。那么下一步我们着手搭建集群服务器,为了方便只演示2台服务器之间的集群搭建。

    集群部署有一个专有名词叫做“桥接”,实现桥接的方式需要修改config.mk与mosquitto.conf文件。值得说明的是如果有10台服务器做Mosquitto集群,每台服务器上将桥连接打开,然后只需要更改一台服务器上的Mosquitto.conf文件即可,其他服务器的Mosquitto.conf文件不需要做任何改动。大大方便了集群的维护。如果有新的服务器加入或删除只需要修改主服务器的Mosquitto.conf即可。

    1、开启服务器桥连接

    进入安装目录

    cd mosquitto-1.4.9/

    打开config.mk文件

    vi config.mk

    找到WITH_BRIDGE:=yes 将签名的“#”号去掉开启桥连接模式。(默认是开启的,为了无误查看一下)

    2、配置Mosquitto.conf的桥连接属性

    进入etc目录,并且打开Mosquitto.conf文件

    cd /etc/mosquitto/

    vi mosquitto.conf

    找到Bridges节点,在下面加入如下代码:

    connection mytest
    address 10.19.22.53:1883
    topic room1/# both 2 sensor/ myhouse/
    bridge_protocol_version mqttv311
    notifications true
    cleansession true
    try_private true
    start_type automatic

    ---------------------------------------------------------------------------------

    connection 连接名称,可以随便取

    address 连接的另外服务器地址和端口号,如果有多台服务器,可以写多个address

    topic 主题名称,“#”为通配符,表示发布端可以在room1/后面接任何文字

    both 服务质量,2代表只有一次(可以查看上一篇博文对MQTT的详细介绍)

    sensor/  本地前缀表示,可以随便命名

    myhouse/ 远程前缀表示,可以随便命名

    bridge_protocol_version mqttv311 桥连接协议版本MQTT3.11

    notifications  是否发布桥接的状态信息

    cleansession  桥接断开时,是否清除远程服务器中的消息

    start_type 桥接模式,目前有三种:automatic、lazy、once

    设置好之后保存退出。

    3、开启服务器

    第一步先确保从服务器先开启,第二步重新启动主服务器的Mosquitto服务。如果配置无误主服务器在开启的时候,会自动连接所有从服务器,显示如下:

    如上图所示,主服务器与从服务器已经桥接完成。

    4、验证发布/订阅

    集群的特点在任何服务器上都可以订阅与发布,并且订阅者可以收到在任何服务器中发送去信息。

    测试场景:在从服务器中订阅一条信息,在主服务器中发布一条信息,从服务器的订阅者可以收到从主服务器中发布的消息。

    (1)在从服务器中键入一下命令:

    mosquitto_sub -t myhouse/room1/#
    注意:myhouse/ 是编写Mosquitto.conf中topic的远程前缀。
    room1/#是topic中的订阅主题
    (2)在主服务器中键入一下命令:
    mosquitto_pub -t sensor/room1/temperature -m ‘26.3‘
    注意:sensor/ 是编写Mosquitto.conf中topic的本地前缀。
    room1/ 是topic中的订阅主题
    temperature  相当与“#”通配符 
    如果Mosquitto.conf配置无误,并且本地前缀与远程前缀拼写正确,那么会显示如下图信息,表示集群配置成功
    在从服务器订阅,在主服务器发送,从服务器订阅者收到信息:
     
    以上为简单的集群配置。
    下一步开发Mosquitto服务器进行可视化管理应用程序。
  • 相关阅读:
    入门activiti-------1简单运行
    JS对象、构造器函数和原型对象之间的关系
    myeclipse配背景色
    maven的pom.xml文件错误
    oracleXE简易版---使用基础
    ognl表达式注意事项
    Executors、ExecutorService、ThreadPoolExecutor
    ThreadPoolExecutor
    Phaser相位(工具的实战案例使用)
    ForkJoin
  • 原文地址:https://www.cnblogs.com/cnsanshao/p/6404898.html
Copyright © 2020-2023  润新知