带有 Sparkplug B 的 MQTT 桥 -> NDEATH 场景未按预期工作
MQTT bridge with Sparkplug B -> NDEATH scenarios not working as expected
我有两台机器,正在测试 MQTT 桥接与 Sparkplug B 有效负载的连接。
我的网桥按预期工作,但是当我模拟下图中注释的一些故障点时,事情并没有按预期工作。我的期望是当图像中的三个点中的任何一个断开连接时,NDEATH 将在机器 B 的代理上可见。
当我终止机器 A 上的发布者或本地 MQTT Broker 时,我确实在订阅机器 B MQTT Broker 时看到了预期的 NDEATH,但是当我拔下机器 A 和 B 之间的插头时,如#3 在图像中,我没有看到 NDEATH!我已经等待了很长时间,以确保 60 秒的 keep alive 有足够的时间做出反应,据我所知,这通常是 keep alive 的 1.5 倍。
机器 A 上的发布者和 Broker 继续运行,当点 #3 的连接恢复在线时,所有消息都已传送,但我期望在桥接连接断开时,任何已发布最后一个消息的节点will & testament (LWT) 会在任何时候由于连接丢失而看到 NDEATH。
我已经用 mosquitto、vernemq 和一些 hive-ce 进行了测试,但是 hive-ce 的功能受到严重限制。我对 MQTT 桥接的理解是否遗漏了什么?不应该在所有三种情况下都发送 NDEATH 吗?
A critical aspect for MQTT in a real-time SCADA/IIoT application is making sure that the primary MQTT SCADA/IIoT
Host Node can know the “STATE” of any EoN node in the infrastructure within the MQTT Keep Alive period (refer
to section 3.1.2.10 in the MQTT Specification). To implement the state a known Will Topic and Will Message is
defined and specified. The Will Topic and Will Message registered in the MQTT CONNECT session establishment,
collectively make up what we are calling the Death Certificate. Note that the delivery of the Death Certificate
upon any MQTT client going offline unexpectedly is part of the MQTT protocol specification, not part of this
Sparkplug™ specification (refer to section 3.1 CONNECT in the MQTT Specification for further details on how an
MQTT Session is established and maintained).
因此,在 MQTT 术语中,NDEATH 是一个 'Will',如上所述,它在 MQTT spec:
的第 3.1 节中定义
If the Will Flag is set to 1 this indicates that, if the Connect request is accepted, a Will Message MUST be stored on the Server and associated with the Network Connection. The Will Message MUST be published when the Network Connection is subsequently closed unless the Will Message has been deleted by the Server on receipt of a DISCONNECT Packet
总而言之,NDEATH 创建了一个 'Will',如果 MQTT 代理失去与发布者的连接(除非首先收到 DISCONNECT),它会发布该消息。
当您建立网桥时,它会中继在网桥配置为中继的任何主题上发布的消息。网桥只传递已发布的消息;没有有关连接了哪些客户端(或他们可能已设置的任何 'Will')的信息,因此当桥接连接断开时,订阅者将不会收到 NDEATH。
监控网桥的连接状态不在规范中,因此选项因经纪人而异。例如,Mosquitto 可以(在桥接连接上使用 'Will')在连接断开时提供通知(参见 mosquitto.conf 中的 notifications
)。这可能会为您提供一些选项来获取您需要的信息。
我有两台机器,正在测试 MQTT 桥接与 Sparkplug B 有效负载的连接。
我的网桥按预期工作,但是当我模拟下图中注释的一些故障点时,事情并没有按预期工作。我的期望是当图像中的三个点中的任何一个断开连接时,NDEATH 将在机器 B 的代理上可见。
当我终止机器 A 上的发布者或本地 MQTT Broker 时,我确实在订阅机器 B MQTT Broker 时看到了预期的 NDEATH,但是当我拔下机器 A 和 B 之间的插头时,如#3 在图像中,我没有看到 NDEATH!我已经等待了很长时间,以确保 60 秒的 keep alive 有足够的时间做出反应,据我所知,这通常是 keep alive 的 1.5 倍。
机器 A 上的发布者和 Broker 继续运行,当点 #3 的连接恢复在线时,所有消息都已传送,但我期望在桥接连接断开时,任何已发布最后一个消息的节点will & testament (LWT) 会在任何时候由于连接丢失而看到 NDEATH。
我已经用 mosquitto、vernemq 和一些 hive-ce 进行了测试,但是 hive-ce 的功能受到严重限制。我对 MQTT 桥接的理解是否遗漏了什么?不应该在所有三种情况下都发送 NDEATH 吗?
A critical aspect for MQTT in a real-time SCADA/IIoT application is making sure that the primary MQTT SCADA/IIoT Host Node can know the “STATE” of any EoN node in the infrastructure within the MQTT Keep Alive period (refer to section 3.1.2.10 in the MQTT Specification). To implement the state a known Will Topic and Will Message is defined and specified. The Will Topic and Will Message registered in the MQTT CONNECT session establishment, collectively make up what we are calling the Death Certificate. Note that the delivery of the Death Certificate upon any MQTT client going offline unexpectedly is part of the MQTT protocol specification, not part of this Sparkplug™ specification (refer to section 3.1 CONNECT in the MQTT Specification for further details on how an MQTT Session is established and maintained).
因此,在 MQTT 术语中,NDEATH 是一个 'Will',如上所述,它在 MQTT spec:
的第 3.1 节中定义If the Will Flag is set to 1 this indicates that, if the Connect request is accepted, a Will Message MUST be stored on the Server and associated with the Network Connection. The Will Message MUST be published when the Network Connection is subsequently closed unless the Will Message has been deleted by the Server on receipt of a DISCONNECT Packet
总而言之,NDEATH 创建了一个 'Will',如果 MQTT 代理失去与发布者的连接(除非首先收到 DISCONNECT),它会发布该消息。
当您建立网桥时,它会中继在网桥配置为中继的任何主题上发布的消息。网桥只传递已发布的消息;没有有关连接了哪些客户端(或他们可能已设置的任何 'Will')的信息,因此当桥接连接断开时,订阅者将不会收到 NDEATH。
监控网桥的连接状态不在规范中,因此选项因经纪人而异。例如,Mosquitto 可以(在桥接连接上使用 'Will')在连接断开时提供通知(参见 mosquitto.conf 中的 notifications
)。这可能会为您提供一些选项来获取您需要的信息。