代码之家  ›  专栏  ›  技术社区  ›  Swordfish

微服务同步通信-服务到服务或消息代理

  •  1
  • Swordfish  · 技术社区  · 8 年前

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

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

    我应该直接呼叫认证服务(服务到服务通信)还是应该使用Kafka?

    如有任何例子或最佳实践建议,我们将不胜感激。

    2 回复  |  直到 8 年前
        1
  •  1
  •   The Mighty Programmer    8 年前

    有多种因素可以推动您的决策:

    • 需要认证服务的确认吗?
      如果是:

      • 要立即确认,请使用http
      • 对于不那么即时的确认,可以实现回调模式。 在您的情况下,用户配置文件通过kafka向auth服务发送请求,并调用 要报告作业状态的用户配置文件的终结点。

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

    • 错误处理
      考虑认证服务失败?用户服务的反应应该是什么?

      • 如果认证服务失败,用户服务也应该失败
        使用HTTP
      • 如果认证服务失败,则用户服务不应失败。
        使用队列
        2
  •  1
  •   karans123    8 年前

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

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