mosquitto 配置详解(3): bridge的配置
发布日期:2021-10-03 22:59:12 浏览次数:30 分类:技术文章

本文共 6367 字,大约阅读时间需要 21 分钟。

配置 Bridges

可以使用下面的选项配置多个bridges (连接到其他brokers).

Bridges不能通过 reload signal重新加载.

address address[:port] [address[:port]],

addresses address[:port] [address[:port]]

配置bridge连接的地址和端口号,端口号是可选的。每一个bridge连接都需要配置.如果不指定端口,默认使用1883 .

如果使用 IPv6 地址,端口号必须配置.

可以配置多个地址。参见 round_robin 选项来了解配置多个地址时的行为。

bridge_attempt_unsubscribe [ true | false ]

如果bridgetopics有“out”的方向,默认行为是发送unsubscribe 请求到远端broker。这意味着更改topic的方向从”in””out”后将不会再收到incoming的消息。 发送 unsubscribe 请求并不总是需要的, 设置 bridge_attempt_unsubscribe  false 将会关闭发送unsubscribe 请求的功能. 默认为 true.

bridge_protocol_version version

设置bridge支持的MQTT协议的版本。可以是mqttv31 或者 mqttv311. 默认是 mqttv31.

cleansession [ true | false ]

配置bridge是否要清理会话 ,默认为falseFalse表示当网络连接断掉后远端broker上的订阅仍然保留;true表示如果连接断掉远端broker上的订阅和消息会被清除。注意的是,设为true,每次bridge重连时会导致大量保留消息的重发。

cleansession  false (the default), 如果你改变了订阅的topic,对进来的topic消息,你可能会得到不期望的行为。这时因为远端broker仍然保留订阅的老的topic。如果遇到这个问题,你可以连接bridgecleansession  true 然后再重连bridgecleansession false

connection name

作为新bridge连接的标记,它也可以用来在远端brokerbridge一个名字作为client id.

keepalive_interval seconds

设置时间间隔,当没有消息发送多长时间后bridge需要发送一个ping。默认为60. 允许的最小值为5.

idle_timeout seconds

使用lazy 启动方式的bridge 在退出之前必须空闲等待的时间。默认为 60 .

local_clientid id

设置本地brokerclientid. 如果不配置,默认为 local.<remote_clientid>. 如果bridge一个broker到他本身,需要确保local_clientid remote_clientid 不一样.

local_password password

设置连接bridge到本地broker时使用的密码。当使用认证和访问控制时,这个很重要。

local_username username

设置连接bridge到本地broker时使用的用户名。当使用认证和访问控制时,这个很重要。

notifications [ true | false ]

设为true时,会发布关于bridge连接的状态信息到本地和远端的brokerIf 。保留的消息发布到$SYS/broker/connection/<remote_clientid>/state topic,除非设置了 notification_topic. 如果消息为 1 表示连接正常, 0表示连接失败. 默认为 true.

此选项使用 Last Will and Testament (LWT) 功能.

notifications_local_only [ true | false ]

若为 true, 只发布bridge连接信息到本地broker,默认为 false.

notification_topic topic

选择通知发送到的topic. 如果不设置,将会发送到$SYS/broker/connection/<remote_clientid>/state.

remote_clientid id

设置此bridge连接的client id. 如果不设置,默认为 'name.hostname', name为连接的名字,hostname 为本机的hostname.

此项取代老的 "clientid" 选项 以避免混淆本地和远端的bridge"clientid" 选项暂时还有效。

remote_password value

bridge配置密码。当连接到MQTT v3.1及以上的broker时,如果需要用户名和密码,此选项有用。只有当remote_username也配置时,此配置项才有效。

代替老的 "password" 选项以避免混淆本地和远端的bridge" password " 选项暂时还有效。

remote_username name

配置bridgeusername. 当连接到MQTT v3.1及以上的broker时,如果需要用户名和密码,此选项有用. 参见 remote_password 选项.

代替老的 "username" 选项以避免混淆本地和远端的bridge. "username" 选项暂时还有效.

restart_timeout base cap,

restart_timeout constant

自动启动的bridge在尝试重连之前的等待时间。

可以配置为延时的秒数;也可以使用"Decorrelated Jitter"backoff机制:加入一个随机度,当启动的时候以base为基础增加到cap

例如:

restart_timeout 20
restart_timeout 10 30

默认base 5秒, cap30

round_robin [ true | false ]

如果bridge配置了多个地址, round_robin 选项定义了bridge连接失败时的处理行为:为 false,也是默认值, 则第一个地址为主连接,如果连接失败,其他的secondary地址按顺序尝试。连接到secondary地址的同时,bridge会周期性的尝试连接主bridge,直到成功。

如果为 true, 所有的地址时平等的. 如果连接失败,会选择下一个地址,成功之后会一直使用这个连接,知道失败为止。

start_type [ automatic | lazy | once ]

设置bridge的启动方式。

可选的方式为automaticlazy and once.  RSMB提供第四种方式"manual" mosquitto当前不支持.

automatic :默认启动方式,broker启动时bridge连接自动建立,如果连接失败,等待30秒后会自动重启。

lazy :当缓存的消息数量超过threshold  选项配置的值时,会自动启动。超过idle_timeout 配置的值后,会停止自动启动。如果你希望连接只在需要的时候启动,可以选择这种方式。

once broker启动时自动启动,连接失败之后不自动重启。

threshold count

lazy方式启动的bridge需要缓存的消息数。 默认为 10 条消息。

topic pattern [[[ out | in | both ] qos-level] local-prefix remote-prefix]

定义在两个broker间共享的topic格式。任何匹配这种格式的topic都是共享的,可以包含模式匹配符。第二个参数定义了消息共享的方式, in: 从远端broker引入消息;out:输出消息到远端brokerboth:两个方向都共享;不定义时,默认为outQoS level 定义了发布和订阅消息的QoS等级,默认为0.

local-prefix  remote-prefix 选项允许发布或接收远端broker的消息时做topic映射。 这样,本地brokertopic 树可以插入到远端broker的合适位置。

对于进入的topics, bridge会使用remote prefix 准备格式并向远端broker订阅改变后的topic 。当接收到匹配的消息,remote prefix 会从topic中删除并加上local prefix

对于出去的topics, bridge会使用local prefix 准备格式并向本地broker订阅改变后的topic 。当处理出去的消息时,local prefix 会从topic中删除并加上remote prefix

当使用topic映射时,可以使用"" 定义一个空的前缀。 Topic本省也可以使用空前缀。下表定义了空值和有效值的哪些组合是合法的。 “Full Local Topic”  “Full Remote Topic” 列展示了映射后的topic名字。 例如,对于第一行,如果发布到topic  L/topic 到本地 broker, 远端broker将会在topic R/topic收到消息。

Pattern

Local Prefix

Remote Prefix

Validity

Full Local Topic

Full Remote Topic

pattern

L/

R/

valid

L/pattern

R/pattern

pattern

L/

""

valid

L/pattern

pattern

pattern

""

R/

valid

pattern

R/pattern

pattern

""

""

valid (no remapping)

pattern

pattern

""

local

remote

valid (remap single local topic to remote)

local

remote

""

local

""

invalid

   

""

""

remote

invalid

 

 

""

""

""

invalid

   

 

要映射整个topic树,例如:

topic # both 2 local/topic/ remote/topic/

这个选项可以定义多次。

注意,不要使用这个选项创建回环topic。如果你的broker占用很高的CPU,可能有一个回环,broker之间一直在转发相同的消息。

参见cleansession 选项如果你从不期望的topic收到消息。

一个 Bridge Topic Remapping的例子:

下面的配置将一个bridge连接到broker  test.mosquitto.org 它订阅了远端的topic $SYS/broker/clients/total 并且重新发布收到的消息到本地topic test/mosquitto/org/clients/total

connection test-mosquitto-org
address test.mosquitto.org
cleansession true
topic clients/total in 0 test/mosquitto/org $SYS/broker/

 

try_private [ true | false ]

如果 try_private  true, bridge会尝试告诉远端broker这是一个bridge而不是普通的client。如果成功,循环检查会更有效并且保留的消息传播的更准确。并不是所有的broker都支持这个功能,所以如果你的bridge不能正常连接时,需要将 try_private 设为 false .

默认为 true.

SSL/TLS 支持

下面的配置项是为所有的bridges配置 SSL/TLS 支持。

bridge_alpn alpn

TLS会话配置应用层协议的协商选项. 对在一个端口同时支持websockets MQTT broker有用。

bridge_cafile file path

必须提供bridge_cafile 或者 bridge_capath 其中之一以支持SSL/TLS

bridge_cafile用来定义包含PEM加密的CA认证文件的路径,这些认证已经为远端broker认证签名。

bridge_capath file path

必须提供bridge_cafile 或者 bridge_capath 其中之一以支持SSL/TLS

bridge_capath 用来定义目录来存放PEM编码的CA认证 ,这些认证已经被远端broker签名认证。为了让 bridge_capath 正常工作, 认证文件必须以 ".crt" 结尾并且每次增加或删除一个认证时必须运行"openssl rehash <path to bridge_capath>"

bridge_certfile file path

如果远端broker需要,此路径是这个bridgePEM编码的客户端认证的路径.

bridge_identity identity

Pre-shared-key 加密为基于认证的加密提供另一个选择。一个bridge可以使用带bridge_identity bridge_psk 选项的PSK配置。这是带PSK加密的client identity. 一次只能有一个基于certificate PSK 的加密用在一个bridge上。

bridge_insecure [ true | false ]

当使用基于认证的TLS, bridge会尝试验证远端证书中的hostname是否匹配将要连接的host或者地址。在测试中,这可能引起问题,所以 bridge_insecure 可以设为false 来关闭hostname 验证.

设为true时,意味着一个恶意的第三方可能潜在的会进入你的服务器,所以,在生产环境中, 应该总是设为false

bridge_keyfile file path

如果远端的broker需要,配置这个bridgePEM编码的私有key的路径。

bridge_psk key

Pre-shared-key 加密为基于加密的认证提供了另一个选择。 一个bridge可以使用带bridge_identity bridge_psk 选项的PSK配置. 这是十六进制不带"0x"前缀格式的pre-shared-key。一次只能有一个基于certificate PSK 的加密用在一个bridge上。

bridge_require_ocsp [ true | false ]

当设置为true, bridge 需要它打开的TLS 连接上的OCSP 作为client.

bridge_tls_version version

          配置这个bridge使用的TLS协议的版本。可用的值为 tlsv1.3tlsv1.2  tlsv1.1. 默认为tlsv1.2. 远端的broker必须支持              相同的TLS版本。

转载地址:https://blog.csdn.net/lclfans1983/article/details/105680528 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Mosquitto安装配置和使用指南
下一篇:mosquitto 配置详解(2):listener的通用配置项和SSL/TLS的支持

发表评论

最新留言

留言是一种美德,欢迎回访!
[***.207.175.100]2024年02月01日 02时51分23秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章