Skip to content

配置

FreeMQTT 服务器端通过 ./freemqttd/config.toml 文件进行配置。TOML格式的配置文件简单易懂,只需用简单的文本编辑器就可更改。

默认配置

toml
[freemqtt]

# 通用配置
[freemqtt.common]
    # 用于生成客户端的 token 和 MQTT 客户端连接鉴权用的秘钥 
    # 必须为64位十六进制字符串(二进制256位秘钥)
    # 一定要注意保管,避免向外泄漏
    secret = "F593BDE387F7530CF0F35CC2DB763F755AB770E779C0FD0C3AB018E7439E2A3D"
    # 最大topic & topic filter 级别,默认4
    maximum_topic_level = 4

    # 发布 FreeMQTT 统计信息间隔
    pub_sys_stat_interval = 300 # in seconds    

# 监听 1883 端口及ip地址
[freemqtt.tcp]
address = "0.0.0.0"
port = 1883

# 监听 8883 (TLS/SSL) 端口及ip地址, 如要禁止,请在每行前加 # 字符注释掉
[freemqtt.ssl]
address = "0.0.0.0"
port = 8883
ssl_certificate = "./ssl/freemqtt.net.crt"
ssl_certificate_key = "./ssl/freemqtt.net.key"

# 监听 8080 (websocket) 端口及ip地址, 如要禁止,请在每行前加 # 字符注释掉
[freemqtt.ws]
address = "0.0.0.0"
port = 8080

# 监听 8443 (websocket over TLS/SSL) 端口及ip地址, 如要禁止,请在每行前加 # 字符注释掉
[freemqtt.wss]
address = "0.0.0.0"
port = 8443
ssl_certificate = "./ssl/freemqtt.net.crt"
ssl_certificate_key = "./ssl/freemqtt.net.key"

# 9080 (web) 这是freemqttctl 管理工具需要管理用的web api 端口, 一定要保留!
[freemqtt.monitor]
address = "localhost"
port = 9080

# 日志文件的未知及每个文件的大小,共10个log 文件进行循环保存 freemqtt.log.1 freemqtt.log.2 freemqtt.log.3 ... freemqtt.log.10
[freemqtt.log]
path = "log/freemqtt.log"
maxim_size = 10485760 # 10M
log_level = "debug"

#  MQTT 5.0 属性配置
[freemqtt.properties]
    session_expiry_interval = 7200 # in second
    message_expiry_interval = 7200 # in second
    receive_maximum = 64
    maximum_packet_size = 2097152 # 2*1024*1024 = 2M bytes
    maximum_qos = 2
    retain_available = true
    topic_alias_maximum = 64
    wildcard_subscription_available = true
    subscription_identifiers_available = true
    shared_subscription_available = true
    server_keep_alive = 60 # in second
    response_information = "Welcome to FreeMQTT Broker."

[freemqtt.common]

secret

  • secret 是FreeMQTT服务端鉴权秘钥
  • 客户的 token 也是基于这个 secret 签字的
  • 一定要注意保密
  • 在生产环境,建议不要使用默认的值

下面是一个在 Python 交互环境下生成 secret 的例子:

python
>>> import uuid
>>> secret = uuid.uuid4().hex.upper() + uuid.uuid4().hex.upper()
>>> print (secret)
>>> '2612311B16A1436492DE219C9848E603654FFECA18EC4498B313C766B3333C43'

maximum_topic_level

  • maximum_topic_level: FreeMQTT 允许的最大Topic 或 Topic Filter 级数,默认值 4。
  • maximum_topic_level = 4 时, topic: a, a/b, a/b/c, a/b/c/d 都是有效的 topic, 而 a/b/c/d/f 则无效(5级)
  • 你可以根据实际需要更改这项配置,其值必须为小于或等于10的正整数。

pub_sys_stat_interval

  • pub_sys_stat_interval: FreeMQTT 发布统计信息的时间间隔,以秒为单位
  • 默认值 300
  • FreeMQTT 每隔这个时间间隔向主题 $SYS/METRICS 发布一次统计信息

统计信息JSON格式样例:

json
{
  "appid": "myapp003",
  "client_count": 1023,
  "received_message_count": 1805,
  "sent_message_count": 2303,
  "retain_message_count": 0,
  "normal_sub_count": 123,
  "share_sub_count": 0,
  "uptime": 6005,
  "timestamp": 1726732972
}

上面的 JSON 数据含义如下

appid: 当前的Application ID
client_count: 在线的 MQTT 客户数
received_message_count: 收到的消息数
sent_message_count: 发出的消息数
retain_message_count: 当前 retain 消息数
normal_sub_count: 常规订阅 Topic Filter 数
share_sub_count: 共享订阅数
uptime: 服务连续运行时间(秒)
timestamp: 本次统计发布的时间戳

[freemqtt.tcp]

  • address:监听的 TCP IP 地址,默认 "0.0.0.0", 如果只允许本机访问可设为 "localhost"
  • port:监听的 TCP 端口, 默认值 1883

[freemqtt.ssl]

  • address: 监听的 TCP IP 地址,默认 "0.0.0.0", 如果只允许本机访问可设为 "localhost"
  • port: 监听的 TCP 端口, 默认值 8883
  • ssl_certificate:TLS/SSL 证书路径,默认 "./ssl/freemqtt.net.crt"
  • ssl_certificate_key:TLS/SSL 私钥路径,默认 "./ssl/freemqtt.net.key"

[freemqtt.ws]

  • address: 监听的 TCP IP 地址,默认 "0.0.0.0", 如果只允许本机访问可设为 "localhost"
  • port: 监听的 TCP 端口, 默认值 8080

[freemqtt.wss]

  • address: 监听的 TCP IP 地址,默认 "0.0.0.0", 如果只允许本机访问可设为 "localhost"
  • port: 监听的 TCP 端口, 默认值 8443
  • ssl_certificate:TLS/SSL 证书路径,默认 "./ssl/freemqtt.net.crt"
  • ssl_certificate_key:TLS/SSL 私钥路径,默认 "./ssl/freemqtt.net.key"

[freemqtt.monitor]

  • 这小节配置项是管理 FreeMQTT 后台进程专用
  • freemqttctl 命令使用此小节配置
  • 如无特殊情况,请不要更改
  • address: 监听的 TCP IP 地址,默认 "localhost"
  • port: 监听的 TCP 端口, 默认值 9080

[freemqtt.log]

  • 这小节是FreeMQTT log file 配置项
  • 如无特殊情况,请不要更改
  • path: log文件路径,默认当前路径下 log/freemqtt.log
  • maxim_size:log 文件最大容量值 ,默认 10485760,即 10M Bytes
  • log_level 可取值: debug | info | warning | error | critical
  • log_level:log 级别,默认 debug
  • log 级别大小关系: debug < info < warning < error < critical
  • log 文件是循环滚动保存: freemqtt.log, freemqtt.log.1, freemqtt.log.2, ... freemqtt.log.10

[freemqtt.properties]

  • 这小节是服务端相应的属性设置,是 MQTT 5.0 才有的属性
  • 具体定义请参照 OASIS 官网的文档
  • session_expiry_interval:MQTT 会话过期间隔,默认值: 7200 秒(2小时)
  • message_expiry_interval:消息过期间隔,默认值:7200 秒(2小时)
  • receive_maximum:服务器端可以接受每个 MQTT 客户的 QoS1 和 QoS2 最大并发Publish 消息数, 默认值:64
  • maximum_packet_size:服务器端可以接受最大 MQTT Packet 大小, 默认 2097152(2M bytes)
  • maximum_qos:服务器端接受的最大 QoS 数,默认 2
  • retain_available:retain 消息是否支持,默认 true(支持)
  • topic_alias_maximum:每个客户端可用最多 Topic 别名数,默认 64
  • wildcard_subscription_available:是否允许通配符的 Topic Filter (例如 a/b/+/c/#),默认值: true
  • subscription_identifiers_available:是否允许订阅标识,默认值:true
  • shared_subscription_available:是否允许共享订阅,默认值:true
  • server_keep_alive: 服务端缺省 keep alive interval, 默认 60 秒
  • response_information:连接成功时 CONNACK 返回携带的属性,默认值: "Welcome to FreeMQTT Broker."