美文网首页我用 LinuxMQTTMac优雅使用指南
mqtt的使用以及 Linux 下安装mosquitto

mqtt的使用以及 Linux 下安装mosquitto

作者: LssTechnology | 来源:发表于2018-12-14 21:09 被阅读7次

    前言

    Mosquitto是一个实现了MQTT3.1协议的代理服务器,由MQTT协议创始人之一的Andy Stanford-Clark开发,它为我们提供了非常棒的轻量级数据交换的解决方案。本文的主旨在于记录Mosquitto服务的安装和使用,以备日后查阅

    一、Linux安装mosquitto

    1. Mosquitto源代码下载并解压

    下载
    wget http://mosquitto.org/files/source/mosquitto-1.4.9.tar.gz
    解压
    tar zxfv mosquitto-1.4.9.tar.gz

    2. 在源码目录里面找到主要的配置文件config.mk,其中包含了所有Mosquitto的安装选项
    # 是否支持tcpd/libwrap功能.
    #WITH_WRAP:=yes
    
    # 是否开启SSL/TLS支持
    #WITH_TLS:=yes
    
    # 是否开启TLS/PSK支持
    #WITH_TLS_PSK:=yes
    
    # Comment out to disable client client threading support.
    #WITH_THREADING:=yes
    
    # 是否使用严格的协议版本(老版本兼容会有点问题)
    #WITH_STRICT_PROTOCOL:=yes
    
    # 是否开启桥接模式
    #WITH_BRIDGE:=yes
    
    # 是否开启持久化功能
    #WITH_PERSISTENCE:=yes
    
    # 是否监控运行状态
    #WITH_MEMORY_TRACKING:=yes
    

    这里需要注意的是,默认情况下Mosquitto的安装需要OpenSSL的支持;如果不需要SSL,则需要关闭config.mk里面的某些与SSL功能有关的选项(WITH_TLS、WITH_TLS_PSK)。接着,就是运行
    make
    &
    make install
    进行安装,完成之后会在系统命令行里发现mosquitto、mosquitto_passwd、mosquitto_pub和mosquitto_sub四个工具,分别用于启动代理、管理密码、发布消息和订阅消息。
    mosquitto mosquitto_passwd mosquitto_pub mosquitto_sub

    3. 编译mosquitto可能出现的问题及解决方法

    3.1、编译工具缺失
    报错信息:make、gcc工具缺失
    解决方法:安装工具:apt-get install build-essential
    3.2、openssl/ssl.h 错误
    报错信息:fatal error: openssl/ssl.h: No such file or directory
    解决方法:
    情况1:检查是否安装openssl,一般VPS都已经安装好了的,未安装则对其进行安装:
    apt-get install openssl
    安装完毕后执行openssl,若可以进入oepnssl模式,如下图


    1.png

    情况2:已安装oepnssl,则先查看/usr/local/include和/usr/include目录,看是否有openssl文件夹,若没有,需安装libssl-dev: apt-get install libssl-dev
    3.3、ares 错误
    报错信息:fatal error:ares.h: No such file or directory
    解决方法:
    方法一:修改mosquitto目录下config.mk文件,将WITH_SRV=yes改为WITH_SRV=no。
    方法二:安装libc-ares-dev:apt-get install libc-ares-dev
    3.4、uuid 错误
    报错信息:fatal error: uuid/uuid.h: No such file or directory
    解决方法:安装uuid-dev:apt-get install uuid-dev

    4. 安装其他依赖包
    yum install gcc gcc-c++ libstdc++-devel 
    
    yum install openssl-devel -y
    
    yum install c-ares-devel -y
    
    yum install uuid-devel -y
    
    yum install libuuid-devel -y
    
    5. 安装完后目录
    mosquitto:  /usr/local/sbin
    
    configuration: /etc/mosquitto
    
    utility command: /usr/local/bin
    

    此时可输入mosquitto直接运行,此时运行的是默认配置文件(也可自定义配置文件运行)

    6. 定义配置文件

    进入 /etc/mosquitto 目录,新建配置文件
    touch mosquitto.conf

    # =================================================================
    # General configuration
    # =================================================================
    
    # 客户端心跳的间隔时间
    #retry_interval 20
    
    # 系统状态的刷新时间
    #sys_interval 10
    
    # 系统资源的回收时间,0表示尽快处理
    #store_clean_interval 10
    
    # 服务进程的PID
    #pid_file /var/run/mosquitto.pid
    
    # 服务进程的系统用户
    #user mosquitto
    
    # 客户端心跳消息的最大并发数
    #max_inflight_messages 10
    
    # 客户端心跳消息缓存队列
    #max_queued_messages 100
    
    # 用于设置客户端长连接的过期时间,默认永不过期
    #persistent_client_expiration
    
    # =================================================================
    # Default listener
    # =================================================================
    
    # 服务绑定的IP地址
    #bind_address
    
    # 服务绑定的端口号
    #port 1883
    
    # 允许的最大连接数,-1表示没有限制
    #max_connections -1
    
    # cafile:CA证书文件
    # capath:CA证书目录
    # certfile:PEM证书文件
    # keyfile:PEM密钥文件
    #cafile
    #capath
    #certfile
    #keyfile
    
    # 必须提供证书以保证数据安全性
    #require_certificate false
    
    # 若require_certificate值为true,use_identity_as_username也必须为true
    #use_identity_as_username false
    
    # 启用PSK(Pre-shared-key)支持
    #psk_hint
    
    # SSL/TSL加密算法,可以使用“openssl ciphers”命令获取
    # as the output of that command.
    #ciphers
    
    # =================================================================
    # Persistence
    # =================================================================
    
    # 消息自动保存的间隔时间
    #autosave_interval 1800
    
    # 消息自动保存功能的开关
    #autosave_on_changes false
    
    # 持久化功能的开关
    persistence true
    
    # 持久化DB文件
    #persistence_file mosquitto.db
    
    # 持久化DB文件目录
    #persistence_location /var/lib/mosquitto/
    
    # =================================================================
    # Logging
    # =================================================================
    
    # 4种日志模式:stdout、stderr、syslog、topic
    # none 则表示不记日志,此配置可以提升些许性能
    log_dest none
    
    # 选择日志的级别(可设置多项)
    #log_type error
    #log_type warning
    #log_type notice
    #log_type information
    
    # 是否记录客户端连接信息
    #connection_messages true
    
    # 是否记录日志时间
    #log_timestamp true
    
    # =================================================================
    # Security
    # =================================================================
    
    # 客户端ID的前缀限制,可用于保证安全性
    #clientid_prefixes
    
    # 允许匿名用户
    #allow_anonymous true
    
    # 用户/密码文件,默认格式:username:password
    #password_file
    
    # PSK格式密码文件,默认格式:identity:key
    #psk_file
    
    # pattern write sensor/%u/data
    # ACL权限配置,常用语法如下:
    # 用户限制:user <username>
    # 话题限制:topic [read|write] <topic>
    # 正则限制:pattern write sensor/%u/data
    #acl_file
    
    # =================================================================
    # Bridges
    # =================================================================
    
    # 允许服务之间使用“桥接”模式(可用于分布式部署)
    #connection <name>
    #address <host>[:<port>]
    #topic <topic> [[[out | in | both] qos-level] local-prefix remote-prefix]
    
    # 设置桥接的客户端ID
    #clientid
    
    # 桥接断开时,是否清除远程服务器中的消息
    #cleansession false
    
    # 是否发布桥接的状态信息
    #notifications true
    
    # 设置桥接模式下,消息将会发布到的话题地址
    # $SYS/broker/connection/<clientid>/state
    #notification_topic
    
    # 设置桥接的keepalive数值
    #keepalive_interval 60
    
    # 桥接模式,目前有三种:automatic、lazy、once
    #start_type automatic
    
    # 桥接模式automatic的超时时间
    #restart_timeout 30
    
    # 桥接模式lazy的超时时间
    #idle_timeout 60
    
    # 桥接客户端的用户名
    #username
    
    # 桥接客户端的密码
    #password
    
    # bridge_cafile:桥接客户端的CA证书文件
    # bridge_capath:桥接客户端的CA证书目录
    # bridge_certfile:桥接客户端的PEM证书文件
    # bridge_keyfile:桥接客户端的PEM密钥文件
    #bridge_cafile
    #bridge_capath
    #bridge_certfile
    #bridge_keyfile
    

    修改配置文件的几项内容

    # 允许匿名用户(设置为不允许匿名登录)
    allow_anonymous false
     # 用户/密码文件,默认格式:username:password
    password_file /etc/mosquitto/pwfile.conf
    

    此设置,连接mosquitto时,必须输入用户名密码
    在 /etc/mosquitto目录下新建pwfile.conf文件
    mosquitto_passwd /etc/mosquitto/pwfile.conf 用户名
    此时,会让连续输入两次密码,输入完成后,建立了一个用户,用
    vi pwfile.conf
    如下图:

    2.png
    我的此时实有三个用户,admin、user、user1
    7. 使用自定义的配置文件运行mosquitto

    mosquitto -c /etc/mosquitto/mosquitto.conf -d
    运行起来后,可用客户端使用用户名、密码链接

    后续

    在配置文件中定义log日志 log_dest 后要加file参数

    log_dest file /var/log/mosquitto/mosquitto.log
    此种情况必须先创建mosquitto.log文件,并且
    chmod -R 777 mosquitto
    修改mosquitto权限目录权限,这样日志才能写进去

    相关文章

      网友评论

        本文标题:mqtt的使用以及 Linux 下安装mosquitto

        本文链接:https://www.haomeiwen.com/subject/isdqcqtx.html