MQTT学习笔记-Mosquitto安装&使用

Mosquitto 介绍

Eclipse Mosquitto是一个开源(EPL/EDL许可)消息代理,它实现了MQTT协议版本5.0,3.1.1和3.1。Mosquitto重量轻,适用于从低功率单板计算机到完整服务器的所有设备。MQTT协议提供了一种使用发布/订阅模型执行消息传递的轻量级方法。这使其适用于物联网消息传递,例如低功率传感器或移动设备,如电话,嵌入式计算机或微控制器。Mosquitto项目还提供了一个用于实现MQTT客户端的C库,以及非常流行的mosquitto_pub和mosquitto_sub命令行MQTT客户端。Mosquitto是Eclipse Foundation的一部分,是一个iot.eclipse.org项目。 - 官网 https://mosquitto.org/

安装

  • 获取最新的源码地址 https://mosquitto.org/download/
  • 下载压缩包 wget https://mosquitto.org/files/source/mosquitto-1.6.3.tar.gz
  • 解压 tar -xvf mosquitto-1.6.3.tar.gz
  • 编译安装
    • 当前的程序目录可直接编译,在编译之前需根据需要做一定的配置,否则会出现 xxx.h找不到的情况

    vim config.mk

    • config.mk包括了多个选项, 可按需关闭或开启,但一旦开启则需要先安装对应的模块
    • 详细的参数说明如下:
    #WITH_SRV 启用c-areas 一个异步DNS查找的库
    # wget http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz
    # tar xvf c-ares-1.10.0.tar.gz
    # cd c-ares-1.10.0
    # ./configure
    # make
    # make install
    #WITH_UUID 启用lib-uuid支持,支持为每个连接的客户端生成唯一的uuid
    # yum install libuuid-devel
    #WITH_WEBSOCKETS 启用websocket支持 需要安装libwebsockets
    #yum install cmake
    #git clone https://github.com/warmcat/libwebsockets.git
    #cd libwebsockets
    #mkdir build
    #cd build
    #cmake ..
    #make install
    # 是否支持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 install进行安装,完成之后会在系统命令行里发现mosquitto、mosquitto_passwd、mosquitto_pub和mosquitto_sub四个工具

使用

  • 切换到 /etc/mosquitto目录下

        cp mosquitto.conf.example mosquitto.conf
        mosquitto参数详细说明:
        # =================================================================
        # 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
    
    • 启动mosquitto服务:
      mosquitto -c /etc/mosquitto/mosquitto.conf
    
      启动过程中提示
      Error: Invalid user 'mosquitto'.
      执行
      添加用户  adduser mosquitto
    
    • 重启mosquitto服务:
    ps -A | grep mosquitto
       30934 ?        00:00:00 mosquitto
       kill -9 30934
       mosquitto -c /etc/mosquitto/mosquitto.conf
    
    • 开启一个客户端,模拟发布 mosquitto_pub -t topic001 -m hello
    • 开启一个客户端,模拟订阅 mosquitto_sub -v -t topic001
鲁ICP备16017569号-2