zoukankan      html  css  js  c++  java
  • 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服务器进行可视化管理应用程序。
  • 相关阅读:
    Python入门11 —— 基本数据类型的操作
    Win10安装7 —— 系统的优化
    Win10安装6 —— 系统的激活
    Win10安装5 —— 系统安装步骤
    Win10安装4 —— 通过BIOS进入PE
    Win10安装2 —— 版本的选择与下载
    Win10安装1 —— 引言与目录
    Win10安装3 —— U盘启动工具安装
    虚拟机 —— VMware Workstation15安装教程
    Python入门10 —— for循环
  • 原文地址:https://www.cnblogs.com/cnsanshao/p/6404898.html
Copyright © 2011-2022 走看看