Mosquitto 每个主题只发射一个
Mosquitto fire only one for each topic
我在我的网络上使用 mosquitto 实现了一个 MQTT 消息代理。我有一个 web 应用程序向代理和订阅同一主题的多个服务器发布内容。所以我有一个冗余方案。
我的问题是,单独使用 mosquitto,有什么方法可以将其配置为仅在第一个订阅者上发布数据?否则,他们都会做同样的事情。
我认为这是不可能的。
但你可以做到这一点。
让第一个订阅者程序在收到消息后立即在通道上使用 ack 进行响应,并让冗余程序在收到初始消息后寻找 ack 一小段时间。
如果收到 ack,冗余不应该做任何事情。
因此,如果第一个订阅者获取并使用消息,其他订阅者即使收到消息也不会做任何事情。
不,目前用 mosquitto 是不可能的(没有其他答案中描述的 2 个订户之间的通信)。
对于新版本的 MQTT 规范 (v5)*,有一个名为 "Shared Subscriptions" 的新模式。这允许多个客户端订阅一个主题,消息将通过循环传递给每个客户端。这更多是为了负载平衡,而不是 master/slave 故障转移。
*有些代理(HiveMQ、IBM MessageSight)已经在 MQTT v3.1.1 中支持某些版本的共享订阅,但它们的实现方式略有不同(不同的主题前缀),因此它们不交叉兼容。
我在我的网络上使用 mosquitto 实现了一个 MQTT 消息代理。我有一个 web 应用程序向代理和订阅同一主题的多个服务器发布内容。所以我有一个冗余方案。
我的问题是,单独使用 mosquitto,有什么方法可以将其配置为仅在第一个订阅者上发布数据?否则,他们都会做同样的事情。
我认为这是不可能的。
但你可以做到这一点。
让第一个订阅者程序在收到消息后立即在通道上使用 ack 进行响应,并让冗余程序在收到初始消息后寻找 ack 一小段时间。
如果收到 ack,冗余不应该做任何事情。
因此,如果第一个订阅者获取并使用消息,其他订阅者即使收到消息也不会做任何事情。
不,目前用 mosquitto 是不可能的(没有其他答案中描述的 2 个订户之间的通信)。
对于新版本的 MQTT 规范 (v5)*,有一个名为 "Shared Subscriptions" 的新模式。这允许多个客户端订阅一个主题,消息将通过循环传递给每个客户端。这更多是为了负载平衡,而不是 master/slave 故障转移。
*有些代理(HiveMQ、IBM MessageSight)已经在 MQTT v3.1.1 中支持某些版本的共享订阅,但它们的实现方式略有不同(不同的主题前缀),因此它们不交叉兼容。