【问题标题】:Microservice Event driven Design with multiple Instances具有多个实例的微服务事件驱动设计
【发布时间】:2015-06-28 19:36:27
【问题描述】:

目前,我们设计并计划将我们的系统转换为微服务架构模式。

为了松散耦合,我们考虑使用 JMS 主题进行事件驱动设计。这看起来很棒。但我现在不知道如何解决多个微服务实例的问题。 对于故障转移和负载平衡,我们有每个服务的 n 个实例。如果将事件发布到主题,每个实例都将接收并处理该事件。

可以通过数据存储中的锁和已处理状态来处理此问题。但是这个解决方案看起来非常昂贵,并且每个实例都有相同的工作。这对我来说不是负载平衡。

这种模式有什么好的解决方案或最佳实践吗?

【问题讨论】:

    标签: spring jms spring-jms microservices event-driven-design


    【解决方案1】:

    为什么不使用Queue 而不是Topic?然后,您的实例将竞争消息,而不是全部获得副本。

    编辑

    rabbitmq 可能更适合您 - 发布到扇出交换并绑定任意数量的队列,每个队列有任意数量的竞争消费者。

    我还看到了在竞争客户端使用相同的客户端 ID 连接时使用的 JMS 主题。一些(全部?)经纪人将只允许一个这样的客户消费。其他人继续尝试重新连接,直到当前消费者死亡。

    【讨论】:

    • 使用队列,我们​​需要一个用于每个服务通信的队列。这还不够解耦。我们将有大约 15 - 20 个微服务。每个服务都有 2 - 10 个要发布的事件。并且一些事件由多个服务处理。所以我们必须实现 A 向 B 发送事件,A 向 C 发送事件,而不是 A 发布事件和 B,C 监听事件。
    • 非常感谢。我找到了适用于 ActiveMQ 的 VirtualDestinations 和适用于 RabbitMQ 的 Fanout。两者都可以解决我的问题,并且应该可以很好地与我的用例配合使用。
    猜你喜欢
    • 2018-05-13
    • 2020-04-27
    • 2019-11-06
    • 2019-11-05
    • 1970-01-01
    • 2019-04-10
    • 2016-12-07
    • 2019-06-18
    • 2021-04-17
    相关资源
    最近更新 更多