Mosquitto之配置文件解析

本篇文章将解释mosquitto.conf文件中部分参数的意义,以方便理解和部署mosquitto。初次使用,难免出现错误,欢迎批评指正。

备注:mosquitto.conf配置文件以 '#' 作为注释。

  • 基本相关

per_listener_settings:按监听配置。mosquitto具备一个默认的listener,称为默认监听端口,同时还可以配置多个listener,一个listener表示一个监听端口,可以在该监听端口上进行消息的发布与订阅操作。当配置多个listener时,本配置项需要设置为true;否则,只会有默认的那个listener生效。默认的listener的端口是通过后面的port指令开启的。

allow_duplicate_messages:设置为true时,允许客户端接收重复消息,false则不允许。mosquitto对于每个发送的的消息,它维护了一个数组,该数组中保存的是该消息已经发送到的客户端id(clientid)。每次发送一个消息时,mosquitto会先检查该客户端的clientid是否已经在该数组中,如果没在,则发送,然后再将该clientid添加到数组中;否则,该消息不会再发送,直接返回。

allow_zero_length_clientid:是否允许客户端连接时的clientid长度为0。本选项在MQTT3.1.1版本以后有效。客户端携带的clientid长度为0时,当本项值设置为true时,broker会结合auto_id_prefix自动生成一个clientid,然后返回给客户端;如果本项值设置为false,那么broker会直接断开与客户端的连接。

auto_id_prefix:自动生成clientid的前缀。

check_retain_source:本项仅针对retain消息(保留消息)有效。在每次有客户端发起订阅的时候,broker都会检查该保留消息的有效性,以决定是否将该消息发送给新接入的订阅者。它主要解决的是在一个消息发布者在发送了保留消息之后,后续假设该消息发布者已经失去了权限,并从访问控制列表(ACL)中被删除,这样,对于该保留消息,其实已经是无效的消息,如果此时有订阅者接入时,mosquitto会根据本项设置值决定是否再将本消息发送给该订阅者。true表示需要检查,false表示不需要检查,即:直接发送给订阅者。

max_inflight_bytes:对于Qos1/2,表示最大正在处理的字节数;一般不进行设置。

max_inflight_messages:仅针对Qos大于0的消息有效。表示最大正在处理的消息数,配合max_queued_messages可以用于限流和确保MQTT的稳定性,但是可能会出现消息丢失现象。

max_keepalive:表示broker支持的最大心跳包括间隔时间。一般说来,超过该时间间隔还未收到任何的数据,broker会断开与该客户端的连接。在mosquitto中,客户端在发起Connect的时候可以携带一个保活时间,broker将检查该保活时间是否大于本项设置值,如果大于,则会返回本设置值给客户端。mosquitto不建议本项设置在10以下,最大值为65535,单位为秒。

max_queued_messages:超过max_inflight_messages的消息会被缓存到队列中。本项设置队列的大小。

max_packet_size:数据包的最大大小。超过设置值,broker会主动断开与该client的连接。对于MQTT V5的版本,broker在断开时会返回一个错误消息给客户端;V5之前的版本不会返回该消息。备注:这里的大小包括了包头等信息,并不是指数据负载内容大小。

mem**:内存配置相关请参考配置文件说明。

persistent_client_expiration:本项针对于Durable客户端而言。超过该时间,broker会删除该会话的信息,这样,Durable 客户端将接收不到任何它断开之后到重连这段时间内未收到的消息。

其他配置略,配置文件描述的比较清楚,或者可以不配置.....

retain_available:false表示不支持retain消息

upgrade_outgoing_qos:表示broker投递消息时是否适配订阅者的Qos。按照标准的MQTT协议,broker投递消息的Qos值是根据发布消息的Qos进行决策。如果发布消息的Qos大于订阅者要求的Qos,那么按照订阅者的Qos进行投递。如果发布消息的Qos小于订阅者要求的Qos,则按照该消息的Qos进行投递。本选项为true时将改变这一规则,即:强制按照订阅者的Qos进行投递。因此,本选项将不满足MQTT的标准。

user:mosquitto不建议使用root权限执行。

bind_address:绑定的ip地址或者主机名。

port:指定mosquitto默认监听的端口。非加密时默认为1883,ssl时建议设置为8883。

max_connections:最大连接数。本配置按listener进行区别,并不是总的连接数。

use_username_as_clientid:使用用户名代替clientid。username为鉴权中的username。如果本选项设置了,但是username为空,则broker会主动断开该客户端的连接。注意:不能与clientid_prefix共同使用。

备注:配置openssl,建议将端口配置为8883,以示区别。

cafile:ca证书文件的路径。

certfile:服务端证书文件的路径。

keyfile:服务端密钥文件的路径。

crlfile:吊销证书文件(certificate revolution list)。

ciphers:服务端支持的密钥算法。

dhparamfile:一种密钥协商算法。

require_certificate:是否需要双向认证。

tls_version:tls的版本号,默认无需填写。

use_identity_as_username:为true时,使用证书的identity作为用户名。

use_subject_as_username:为true时,使用证书的subject作为用户名。

  • listener相关

  • 预共享密钥相关

psk_hint:是否开启预共享密钥功能。

ciphers:预共享密钥支持的算法,可以使用openssl ciphers查看有哪些。

use_identity_as_username:是否使用预共享密钥的identity作为用户名。

  • 存储相关

autosave_interval:自动保存间隔。存在两种意义,其一代表时间,另外一个意义代表个数。具体需要结合autosave_on_changes来看。

autosave_on_changes:为true时,表示开启,broker统计变化消息等数量超过autosave_interval就进行一次保存。

persistence:开启是否保存,true表示开启。

persistence_file:保存的文件名。

persistence_location:保存的路径。

  • 日志相关

  • 安全相关

clientid_prefixes:客户端clientid前缀。broker只允许clientid符合该前缀的的客户端接入broker,其他不符合的客户端将被broker断开连接。

allow_anonymous:是否开启匿名接入。默认为true,开启。

auth_*:外部插件授权方式。

  • 访问控制相关

acl_file:指向一个配置了访问控制列表的文件。文件以行为单位进行分割。支持topic和pattern模式进行控制。

  • 桥模式相关

桥主要用来连接多个broker,一个桥必须指定一个地址和至少一个topic来订阅。

关于桥模式的配置,可以参见配置文档中的说明,后续文章也会介绍桥模式的配置实例。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值