gpt4 book ai didi

rabbitmq - 在微服务的发布/订阅模型中,如何只接收/使用每种服务类型的消息一次

转载 作者:行者123 更新时间:2023-12-04 15:07:29 24 4
gpt4 key购买 nike

我们正在设计一个微服务架构模型,其中服务 A 发布消息和服务 B,而 C 想要接收/使用该消息。但是,为了实现高可用性,服务 B 和 C 的多个实例同时运行。现在的问题是我们如何设计使得只有 B 的一个服务实例和 C 的一个服务实例接收消息,而不是所有其他服务实例。

就我对 RabbitMQ 的了解,实现这种行为并不容易。我想知道 Kafka 或任何其他消息传递框架是否具有对这种场景的内置支持,我认为这在微服务架构中应该很常见。

最佳答案

Kafka 有一个名为 Consumer Groups 的功能,它完全符合您的描述。

B 的每个相同实例都可以将其 group.id 声明为相同的字符串(例如“serviceB”),并且 Kafka 将确保每个实例都为其订阅的所有主题分配一组互斥的主题分区。

由于 C 的所有实例将具有不同的 group.id(例如“serviceC”),因此它们也将获得与 B 实例相同的消息,但它们将位于独立的消费者组中,因此消息仅发送到 N 个实例中的 1 个C,最大实例数,即主题分区的总数。

您可以动态独立地增加或减少 B 和 C 的实例数量。如果任何实例死亡,其余实例将自动重新平衡其分配的主题分区,并接管对死亡实例的消息处理。

数据永远不必存储多次,因此所有这些服务实例仍然只有一个提交日志或“真实来源”。

关于rabbitmq - 在微服务的发布/订阅模型中,如何只接收/使用每种服务类型的消息一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45538292/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com