2个微服务之间如何实现通信

How to implement communication between 2 micro services

我和我的同事讨论了我们应该如何实现两个微服务之间的通信。目前我们有 2 个相互依赖的微服务,因为我的同事想通过重用用于 REST API.

的 DTO 对象来避免代码重复

在一个完美的世界中,我们不会在服务之间有任何依赖关系,但在我们的例子中这是有道理的。在我看来,这耦合了比复制 DTO 更糟糕的服务。

你会在第二个微服务中复制DTO还是有其他解决方案?

我建议您使用 GRPC(protocol buffer) 在微服务之间进行通信。

  1. 创建一个包含 protocol buffers 文件的 maven 项目(就像一个项目只包含在其他项目中共享的 DTO)
  2. 创建多少你喜欢的服务并添加 protobuf 作为依赖,它甚至可以是一个 android 项目
  3. 使用 grpc 与您分离的服务进行通信(在微服务中,服务之间永远不应该有任何依赖关系)

我曾经尝试过不同的解决方案来在服务之间进行通信,包括 REST API,但我发现 GRPC 是这样做的完美世界。 您还可以将 REST API 与 GRPC 一起使用。

对于"Loose coupling"的概念,不建议设计通过REST相互通信的微服务。这是一篇很好的博客文章来理解这个概念。 https://www.beeworks.be/blog/2017/rest-antipattern.html
一种方法是使用消息代理作为企业价格总线。
如果您使用消息代理, - 您可以使用 RPC 调用向另一个微服务请求一个微服务。 - 或者您可以发布活动(pub/sub)
这是一篇很好的博文,可以帮助您了解在微服务基础架构中使用消息代理的概念。
https://dev.to/matteojoliveau/microservices-communications-why-you-should-switch-to-message-queues--48ia

即使在这个 post 中,对于如何在微服务之间共享模型以及如何通信也存在不同意见。我会说这个 post.

中解释了干净的解决方案