基于MQTT的C ++服务的高可用性

问题描述 投票:0回答:1

我写了一些带有MQTT客户端的c ++服务。根据在MQTT主题上收到的消息,c ++服务将采取一些操作,例如将MQTT消息发送到另一个主题或将该消息保存到数据库等。

我已经在Docker上建立了一些MQTT代理,并将那些MQTT代理附加到HA负载均衡器。所有这些MQTT经纪人也都聚集在一起。

因此,如果客户机1连接的代理-1(通过负载均衡器)可以将消息发送到客户机x连接的代理-x。由于MQTT经纪人的集群。

因此,如何使用HA或类似的负载平衡器将负载平衡器设置为我的c ++服务?

更新:

在使用HTTP / REST API的情况下,该请求在任何时间都只会传输到一个Web应用程序。但是对于MQTT,消息将被发布,并且如果我运行Same ABC的多个c ++服务,则所有服务都将处理该消息。如何确保只有一项服务会处理该消息。我想为C ++服务建立高可用性

kubernetes mqtt high-availability
1个回答
0
投票

在MQTT 3.x下是不可能的。原因是在MQTT 5之前,每条消息都发送给该主题的每个订户,这使得正确地进行负载平衡非常困难(除非订户接收到所有内容然后丢弃一部分消息)。这是MQTT 3.x的局限之一。

有些人通过将他们的MQTT代理连接到Apache Kafka集群,将所有消息从MQTT路由到Kafka,然后将他们的订阅者(如您的c ++服务)聚集起来,解决了这个问题。


这可能会在MQTT 5.0中更改。仍然有许多不支持此功能的客户和经纪人。但是,如果您的客户端和代理程序都支持MQTT版本5,那么将有一个新的[[1概念“ Shared Subscriptions”:

  • 共享订阅 –如果订阅的消息速率很高,则可以使用共享订阅在多个接收客户端之间平衡消息的负载
您尚未声明您的客户端库。但是您的第一步应该是:

    调查您的经纪人和订户是否都支持MQTT 5
  • 检查客户端的API以发现如何使用订户组

  • 1

  • MQTT的新手
    © www.soinside.com 2019 - 2024. All rights reserved.