zoukankan      html  css  js  c++  java
  • MQTT研究之mosquitto:【环境搭建】

    环境信息:

    1. Linux Centos7.2 环境,CPU 2核,内存8G.

    2. mosquitto版本:mosquitto-1.5.4

    官网:http://mosquitto.org/download/
    libwebsockets官网: https://libwebsockets.org/

    本环境搭建,主要用到了mosquitto,么有涉及websocket的内容,所以,这里不做安装介绍。

    搭建过程:

    1. 安装mosquitto-1.5.4

    下载解压缩mosquitto-1.5.4.tar.gz。然后执行make

    [root@ws2 mosquitto-1.5.4]# make
    set -e; for d in lib client src; do make -C ${d}; done
    make[1]: Entering directory `/opt/mosquitto-1.5.4/lib'
    cc -Wall -ggdb -O2  -I. -I.. -I../lib -fPIC -DWITH_TLS -DWITH_TLS_PSK -DWITH_THREADING -DWITH_SOCKS -c mosquitto.c -o mosquitto.o
    In file included from mosquitto.c:27:0:
    mosquitto_internal.h:28:27: fatal error: openssl/ssl.h: No such file or directory
     #  include <openssl/ssl.h>
                               ^
    compilation terminated.
    make[1]: *** [mosquitto.o] Error 1
    make[1]: Leaving directory `/opt/mosquitto-1.5.4/lib'
    make: *** [mosquitto] Error 2

    上述错误是因为没有安装openssl-devel。安装上openssl-devel即可解决: yum install openssl-devel

    make -C cpp
    make[2]: Entering directory `/opt/mosquitto-1.5.4/lib/cpp'
    g++ -Wall -ggdb -O2  -I. -I.. -I../lib -fPIC -c mosquittopp.cpp -o mosquittopp.o
    make[2]: g++: Command not found
    make[2]: *** [mosquittopp.o] Error 127
    make[2]: Leaving directory `/opt/mosquitto-1.5.4/lib/cpp'
    make[1]: *** [all] Error 2
    make[1]: Leaving directory `/opt/mosquitto-1.5.4/lib'

    上述错误是因为没有安装gcc-c++. 安装上gcc-c++即可解决: yum install gcc-c++

    cc -I.. -Wall -ggdb -O2  -c mosquitto_passwd.c -o mosquitto_passwd.o
    cc mosquitto_passwd.o -o mosquitto_passwd  -lcrypto
    make[1]: Leaving directory `/opt/mosquitto-1.5.4/src'
    set -e; for d in man; do make -C ${d}; done
    make[1]: Entering directory `/opt/mosquitto-1.5.4/man'
    make[1]: Nothing to be done for `all'.
    make[1]: Leaving directory `/opt/mosquitto-1.5.4/man'

    上述错误是因为没有安装c-ares-devel. 安装上c-ares-devel即可解决: yum install c-ares-devel

    解决上面的问题,可以一次安装下面的所有的依赖:yum -y install gcc gcc-c++ openssl-devel c-ares-devel libuuid-devel wget cmake

    [root@ws2 mosquitto-1.5.4]# yum -y install gcc gcc-c++ openssl-devel c-ares-devel libuuid-devel wget cmake
    Loaded plugins: fastestmirror
    Loading mirror speeds from cached hostfile
    Package gcc-4.8.5-28.el7.x86_64 already installed and latest version
    Package gcc-c++-4.8.5-28.el7.x86_64 already installed and latest version
    Package 1:openssl-devel-1.0.2k-12.el7.x86_64 already installed and latest version
    Package c-ares-devel-1.10.0-3.el7.x86_64 already installed and latest version
    Package libuuid-devel-2.23.2-52.el7.x86_64 already installed and latest version
    Package wget-1.14-15.el7_4.1.x86_64 already installed and latest version
    Package cmake-2.8.12.2-2.el7.x86_64 already installed and latest version

    2. 配置mosquitto

    进入/etc/mosquitto目录

    [root@ws2 mosquitto]# cp mosquitto.conf.example mosquitto.conf
    [root@ws2 mosquitto]# cp pwfile.example pwfile

    vi mosquitto.conf,做下面配置

    allow_anonymous true
    password_file /etc/mosquitto/pwfile

    然后,在文件最末尾补充(mosquitto服务监听的端口):

    port 1883

    listener 9090

    protocol websockets

    3. 启动mosquitto

    [root@ws2 mosquitto]# mosquitto -c /etc/mosquitto/mosquitto.conf
    Error: Websockets support not available.
    Error found at /etc/mosquitto/mosquitto.conf:874.
    Error: Unable to open configuration file.

    这个错误,是因为我没有安装websockets模块,另外,config.mk里面的websocket没有配置为YES。所以将配置中websocket的注释掉即可。

    #listener 9090
    #protocol websockets

    再次启动:

    [root@ws2 mosquitto]# mosquitto -c /etc/mosquitto/mosquitto.conf
    1544435834: mosquitto version 1.5.4 starting
    1544435834: Config loaded from /etc/mosquitto/mosquitto.conf.
    1544435834: Opening ipv4 listen socket on port 1883.
    1544435834: Opening ipv6 listen socket on port 1883.
    1544435834: Error: Invalid user 'mosquitto'.

    上述错误显示没有mosquitto用户,创建用户并添加组

    [root@ws2 mosquitto]# groupadd mosquitto
    [root@ws2 mosquitto]# useradd -g mosquitto mosquitto

    最后再次启动:

    [root@ws2 mosquitto]# mosquitto -c /etc/mosquitto/mosquitto.conf
    1544436204: mosquitto version 1.5.4 starting
    1544436204: Config loaded from /etc/mosquitto/mosquitto.conf.
    1544436204: Opening ipv4 listen socket on port 1883.
    1544436204: Opening ipv6 listen socket on port 1883.

    此时,mosquitto以前台服务的方式在运行。。。如何使用,请看帮助信息:

    [root@ws2 mosquitto]# mosquitto --help
    mosquitto version 1.5.4
    
    mosquitto is an MQTT v3.1.1 broker.
    
    Usage: mosquitto [-c config_file] [-d] [-h] [-p port]
    
     -c : specify the broker config file.
     -d : put the broker into the background after starting.
     -h : display this help.
     -p : start the broker listening on the specified port.
          Not recommended in conjunction with the -c option.
     -v : verbose mode - enable all logging types. This overrides
          any logging options given in the config file.
    
    See http://mosquitto.org/ for more information.

    4. 测试验证

    [root@ws2 ~]# mosquitto_sub -t rulee
    mosquitto_sub: error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

    此处错误,表明动态库没有配合好路径,参照下面的操作(主要是红色的两行指令):

    [root@ws2 ~]# cat /etc/ld.so.conf
    include ld.so.conf.d/*.conf
    [root@ws2 ~]# 
    [root@ws2 ~]# echo "/usr/local/lib" >> /etc/ld.so.conf
    [root@ws2 ~]# 
    [root@ws2 ~]# vi /etc/ld.so.conf
    include ld.so.conf.d/*.conf
    /usr/local/lib
    [root@ws2 ~]# ldconfig

    然后再次订阅一个rulee的topic:

    然后,再启动一个终端,进行发布消息操作:

    [root@ws2 ~]# mosquitto_pub -h localhost -t rulee -m "hello rule engine"

    在上面的订阅窗口已经收到这个发布的消息

    [root@ws2 ~]# mosquitto_sub -t rulee                  
    hello rule engine

    安全控制:

    上面的操作,是针对无安全控制的,下面,进行带安全控制的配置,进入/etc/mosquitto目录:

    [root@ws2 mosquitto]# cp mosquitto.conf.example mosquitto.conf
    [root@ws2 mosquitto]# cp pwfile.example pwfile
    [root@ws2 mosquitto]# cp aclfile.example aclfile

    vi mosquitto.conf,做下面配置

    allow_anonymous false
    password_file /etc/mosquitto/pwfile
    acl_file /etc/mosquitto/aclfile

    然后,在文件最末尾补充监听端口(若没有配置的话): port 1883

    添加安全用户信息:

    [root@ws2 mosquitto]# mosquitto_passwd -c /etc/mosquitto/pwfile shihuc
    Password: 
    Reenter password: 

    重新启动mosquitto服务:

    [root@ws2 mosquitto]# mosquitto -d -c /etc/mosquitto/mosquitto.conf

    订阅:

    [root@ws2 ~]# mosquitto_sub -t rulee                  
    hello rule engine
    Connection Refused: not authorised.
    [root@ws2 ~]# 
    [root@ws2 ~]# 
    [root@ws2 ~]# mosquitto_sub -t /taikang/rulee -u shihuc -P shihuc

    发布:

    [root@ws2 ~]# mosquitto_pub -h localhost -t /taikang/rulee -m "hello rule engine with auth"
    Connection Refused: not authorised.
    Error: The connection was refused.
    [root@ws2 ~]# 
    [root@ws2 ~]# 
    [root@ws2 ~]# mosquitto_pub -u shihuc -P shihuc -h localhost -t /taikang/rulee -m "hello rule engine with auth" 
    [root@ws2 ~]# 
  • 相关阅读:
    LaTex 章节层次
    计算机组成原理——第二章 运算方法和运算器(笔记)
    计算机组成原理——第一章 计算机组成原理概论(笔记)
    LaTex图片的插入与引用
    adobe 下载与安装
    Jupyter upload无效(无法上传文件)的解决办法
    小星星的js 找不到了 ,直接上源码
    excle网页上预览
    svn is already locked. 文件被锁定
    搭建SSM项目,从数据库到前台数据显示 2019
  • 原文地址:https://www.cnblogs.com/shihuc/p/10095917.html
Copyright © 2011-2022 走看看