我们正在使用Mosquitto
MQTT代理,一个物联网服务器实现和连接到代理作为客户端的设备。设备和IoT服务器都将发布到代理。
设备将请求发布到主题:/req/<device-id>/<server-id>
个
设备订阅响应:/resp/<device-id>/<server-id>
个
如果IoT服务器向特定设备发送通知,则它会发布到设备也订阅的通知主题:
/req/<server-id>/<device-id>
字符串
的数据
因此,这个场景到目前为止运行良好,但我们希望将我们的实现转移到Kubernetes
上,以便MQTT代理和IoT服务器都将运行多个Pod。
现在任何设备都可以连接到任何mosquitto
pod示例,任何IoT server
pod都可以连接到mosquitto
pod示例。
因此,如果IoT server
的pod2生成通知并将其发送到我们的设备未连接到的mosquitto
pod示例,则连接到mosquitto
pod1和IoT server
pod1的设备可能不会收到通知。
所以IoT server
需要知道哪个device
连接到哪个pod示例来发送通知。
如何在Kubernetes
环境下实现这一点??
1条答案
按热度按时间nkoocmlb1#
对此的简短回答是:你不容易。
更长的答案是:
你可能需要选择一个不同于mosquito的MQTT代理,mosquito不支持集群,所以没有(简单)的方法来运行多个示例,会话和消息可以分布在这些示例上。
您可以在多个代理示例之间设置桥接,以确保消息最终到达所有示例,但最好的方法是采用星星型结构,使用“中央”代理,然后将所有消息重新分发到星型结构的点。然后设备将连接到这些星星示例。这并不能解决分布式会话的任何问题。
您可能还需要查看共享订阅,以便消息仅由IoT服务器的单个示例使用。
还有其他几个MQTT代理实现支持适当的集群,如HiveMQ和emqx