Skip to content

0.Configuration

xukeawsl edited this page Oct 6, 2024 · 7 revisions

整个 mqtt-server 的配置都包含在项目目录下的 config.yml 中, 默认的配置项如下:

# SSL/TLS 全局配置, 构建启用 MQ_WITH_TLS 时读取
# 在 listeners 中可以使用特定的配置, 未配置则使用全局配置
ssl:
  # TLS 协议版本, 仅支持 tls1.2 和 tls1.3 (默认 tls1.2)
  version: 'tls1.2'

  # CA 证书, 双向认证时用于验证客户端证书, 单向认证可不配置
  #cacertfile: '../certs/ca.crt'

  # 服务器证书
  certfile: '../certs/server.crt'

  # 服务器私钥
  keyfile: '../certs/server.key'

  # 服务器私钥受密码保护时需要提供密码
  # password: 'MQTT'

  # 认证模式, 支持单向认证 verify_none 和 双向认证 verify_peer
  # 默认认证模式为单向认证
  verify_mode: 'verify_none'

  # 客户端没有证书时, 是否拒绝 SSL/TLS 连接 (默认 false)
  # 只有开启双向认证时有效, 为 true 表示强制双向认证
  fail_if_no_peer_cert: false

  # 增强 SSL/TLS 连接的安全性, 可以使用 Diffie-Hellman 密钥交换算法(DH)
  # 来生成参数 (默认不使用)
  # dhparam: '../certs/dh4096.pem'

listeners:
  # 非加密 tcp 连接
  - address: 'mqtt://0.0.0.0'
    port: 1883

  # 加密 tcp 连接, 未配置专门的证书时取全局配置
  - address: 'mqtts://0.0.0.0'
    port: 8883
    certfile: ''
    keyfile: ''

  # 非加密 websocket 连接
  - address: 'ws://0.0.0.0'
    port: 8083

  # 加密 websocket 连接, 配置一个指定的 TLS 版本
  - address: 'wss://0.0.0.0'
    port: 8084
    version: 'tls1.3'

# MQTT Server 相关配置
server:
  protocol:
    # CONNECT 阶段的超时时间, 考虑到网络延时实际程序中设置的超时
    # 时间为其 1.5 倍 (默认 10 秒, 为 0 表示不设置超时)
    connect_timeout: 10

    # 检查会话超时的间隔 (默认 1 秒)
    check_timeout_duration: 1

    # 检查需要重发的报文或过期等待报文的间隔 (默认 1 秒)
    check_waiting_map_duration: 1

    # 最大重发次数 (默认 3 次)
    max_resend_count: 3

    # 每一次重发的时间间隔 (默认 60 秒)
    resend_duration: 60

    # 等待响应的最大时间 (默认 60 秒)
    max_waiting_time: 60

    # 是否开启用户名/密码认证 (默认关闭)
    auth: false

    # 用户名/密码对, 只有 auth 开启程序才会读取
    # 用户名不可重复, 重复了后面的会覆盖前面的
    credentials:
      - username: 'key1'
        password: 'value1'
      - username: 'key2'
        password: 'value2'
      # 用户名密码可以为空字符串
      # - username: ''
      #   password: ''
    
    # 是否开启 ACL 认证, 只有 auth 开启时才会读取
    acl:
      enable: false
      # ACL 规则文件, 使用 yml 文件配置
      acl_file: '../acl_rules.yml'
      # 当进行 ACL 检查时, 从上到下一次匹配规则, 直到匹配到一个允许或拒绝时停止
      # 如果都没有匹配到, 根据此默认项设置是允许还是拒绝
      default: 'deny'

    # 自动订阅列表, 订阅行为不受 ACL 控制
    # auto_subscribe_list:
    #   - topic: 'auto/topic0'
    #     qos: 0
    #   - topic: 'auto/topic1'
    #     qos: 1
    #   - topic: 'auto/topic2'
    #     qos: 2

# 资源限制相关配置
limits:
  # 发布消息的最大大小, 协议本身最大支持 256MB, 因此配置超过这个值的大小无效
  # 支持使用后缀单位 KB 和 MB, 配置为空或者不配置也表示不限制
  # max_packet_size: '10MB'

  # 每个客户端的最大订阅主题数, 默认不限制
  # max_subscriptions: 100

  # 订阅速率限制, 支持突发流量, req_per_second 设置每秒处理的请求数, 支持小数, 不配置则不限速
  # brust 设置突发请求数, 当值大于 req_per_second 时才有效, 支持小数, 如果不配置则与 req_per_second 相同
  # sub_rate_limit:
  #   req_per_second: 0.1
  #   brust: 1
  
  # 发布速率限制, 参数含义同上, 注意如果请求被限流会延迟处理, 且等待延迟处理的这段时间无法
  # 立即处理新的请求, 而是排队等待处理, 不过消息转发还是可以正常进行
  # pub_rate_limit:
  #   req_per_second: 1
  #   brust: 3

# 日志相关配置
log:
  # 日志文件名 (默认 mqtt-server.log)
  name: 'logs/mqtt-server.log'

  # 滚动日志单个日志的最大字节数 (默认 1MB = 1048576 B)
  max_rotate_size: 1048576

  # 滚动日志最大数量 (默认 10 个)
  max_rotate_count: 10

  # 日志线程池队列大小 (默认 8192)
  thread_pool_qsize: 8192

  # 日志线程池线程数 (默认 1 个日志线程)
  thread_count: 1

相关配置项的说明已经通过注释进行了介绍, 当未开启 SSL/TLS 时, ssl 相关的监听配置是无效的, 如果开启了 SSL/TLS, 则支持监听 SSL/TLS 指定的端口, 可以配置多个监听端口, 所有监听端口都是共享内存中的消息的, 非加密连接的客户端也能够收到加密连接的客户端发布消息, 如果配置项中存在配置有误的地方, 则 mqtt-server 运行后会立即停止, 你可以根据日志中的提示信息来查看是哪个配置项有误

Clone this wiki locally