【问题标题】:Microservices inter communication with multiple Microservices微服务与多个微服务的相互通信
【发布时间】:2020-08-19 16:04:45
【问题描述】:

刚接触微服务,正在尝试动手,我知道这将是一个大问题,但请多多包涵。所以任何人都可以指导我最好的方法,

  • 如何通过服务类方法与多个微服务(在我的例子中是 5 个)进行交互/通信 另一个微服务。

  • 如果其中一个微服务宕机了怎么办?

  • 在这种情况下事务管理如何工作?

  • 最后,如何组合所有这些响应并作为单个 ResponseEntity<APIResponse> 发回

感谢您阅读本文,请指导我。

谢谢...

【问题讨论】:

    标签: java spring spring-boot microservices


    【解决方案1】:

    这是一个非常大的问题。答案可以写不止一本书。我将尝试在我的想法中列出一些内容,以便您从中分得一杯羹。

    • 微服务之间的通信。
      • 同步方式。通过 HTTP 请求、RPC 方法或 SOAP。
      • 异步方式。事件溯源,例如 Kafka、RabbitMQ。数据库共享。
    • 如果其中一个微服务宕机了怎么办?
      • 这是您处理可用性的方式,大多数情况下,所有微服务都会有多个实例。
      • 基于多个实例,您可以实施一些策略来帮助您控制灾难,例如断路器、重试、限制。
    • 在这种情况下事务管理如何工作?
      • 您可以尝试分布式事务框架,但它们通常看起来过于复杂。
      • 设计分布式系统中最常见的做法是 CAP 和最终一致性。检查维基
    • 如何组合所有这些响应并作为一个单一的发送回
      • 这实际上取决于您如何设计 API,您始终可以使用 API Gateway 方法,在一个服务中处理所有逻辑到 FE。

    上面的问题很少,你可以在线阅读一些书籍或谷歌详细解决方案。

    【讨论】:

    • Event sourcing 不是关于“通信”,而是关于“数据持久性”。更好的名称是“事件通知”
    • 分布式事务框架是什么意思
    • 我的意思是事件溯源,实际上是 EDA,en.wikipedia.org/wiki/Event-driven_architecture
    • 分布式事务被一些分布式数据库支持,例如OceanBase,TiDB。分布式事务框架更像是你的数据库和服务之间的中间件,比如github.com/seata/seata
    • 好的,但事件溯源与“微服务之间的通信”无关。关于分布式事务,您应该避免像 2PC 这样的算法共识,而是更喜欢处理具有多个“本地”事务的“业务”事务(微服务一个本地事务)。看看 saga 模式,它被建模为多个本地事务和“补偿”事务来处理回滚。
    猜你喜欢
    • 2017-05-28
    • 2021-11-07
    • 2021-07-07
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2017-12-31
    相关资源
    最近更新 更多