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