首先,我几乎可以肯定这已经解决了。但是,我终生无法找到合适的搜索词组合来在任何地方找到它。
在Kubernetes集群上使用微服务描述一个基于RabbitMQ交换的简单通信。有一个中央RabbitMQ部署,通过它广播通信(使用主题交换),然后由各种微服务使用。我遇到的问题是每个微服务的每个Pod直接连接到交换机,这导致一个问题,如果一个微服务已扩展为使用多个Pod,则广播消息可能会被处理几次。
作为一个最小的示例,请想象两个部署:一个Pod的RabbitMQ部署,和几个Pod的“ Log”部署,每个Pod运行相同的“ Log”微服务的实例。日志微服务所做的只是消耗RabbitMQ交换中的所有消息并将其保存到数据库中。由于微服务的每个实例(通过amqp协议)独立连接到交换机,因此每个微服务将独立使用每条消息并将其写入数据库。因此,如果有五个吊舱,当我只想要一个吊舱时,数据库中就会有五个条目。
所以我的问题是:在Kubernetes中,如何最大程度地平衡主题交换的动态扩展使用者之间的负载平衡(在运行时我不知道其数目),以确保来自交换的消息仅能到达其中之一?