【问题标题】:Microservice synchronous communication - service to service or message broker微服务同步通信——服务到服务或消息代理
【发布时间】:2018-11-26 03:07:39
【问题描述】:

我正在使用 Spring Boot 和 Kafka 开发一系列微服务。对于异步通信,我使用的是运行良好的 Kafka。

我有一个用例,我需要两个微服务之间的同步通信(用户通过用户配置文件服务注册配置文件,需要在身份验证微服务中创建一个身份验证帐户)。

我应该直接调用 auth 服务(服务到服务通信)还是应该使用 Kafka?

任何示例或最佳实践建议将不胜感激。

【问题讨论】:

    标签: spring spring-boot apache-kafka microservices


    【解决方案1】:

    理想情况下,在用户创建和身份验证中,向客户端提供实时响应,但如果涉及复杂的流程或任务,则应首选用户创建队列。

    对于多个微服务同步交互并处理它们的 API 响应,您可以构建一个聚合器服务,该服务可以作为不同服务之间的通信媒介,并与您的 kafka 队列消费者服务一起工作。

    【讨论】:

    • 谢谢,它只需要调用一个微服务。
    【解决方案2】:

    有多种因素可以推动您做出决定:

    • 需要您的身份验证服务的任何确认?
      如果是:

      • 要立即确认,请使用 http
      • 对于不那么立即的确认,可以实施回调模式。 在您的情况下,用户配置文件通过 Kafka 向身份验证服务发送请求并调用 用户配置文件的端点以报告作业的状态。

      如果没有:
      使用队列一以获得更好的弹性。

    • 错误处理
      想到身份验证服务失败?用户服务应该是什么反应?

      • 如果身份验证服务失败,用户服务也应该失败
        使用http
      • 如果身份验证服务失败,用户服务应该不会失败。
        使用队列

    【讨论】:

    • 非常感谢您的回复。我想我会使用 http,因为我需要立即确认,如果身份验证服务失败,用户服务也应该失败(不应该在没有任何身份验证凭据的情况下创建用户)。我还发现了this article,这可能有点矫枉过正。
    最近更新 更多