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

时间:2018-11-07 13:03:18

标签: java microservices code-duplication

我与我的同事讨论了我们应该如何实现2种微服务之间的通信的方式。目前,我们有2个相互依赖的微服务,因为我的同事希望通过重用用于REST API的DTO对象来避免代码重复。

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

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

3 个答案:

答案 0 :(得分:0)

我建议您在微服务之间进行通信时使用GRPC(协议缓冲区)。

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

我曾经尝试过不同的解决方案,以在包括REST API在内的服务之间进行通信,但是我发现GRPC是一个理想的选择。 您也可以将REST API与GRPC一起使用。

答案 1 :(得分:0)

对于“松散耦合”的概念,建议不要设计通过REST相互通信的微服务。这是理解该概念的好博客。 https://www.beeworks.be/blog/2017/rest-antipattern.html
一种方法是将消息代理用作Enterprice总线。
如果您使用消息代理, -您可以使用RPC调用向另一个微服务请求一个微服务。 -或者您可以发布事件(发布/订阅)
这是一篇很好的博文,了解在微服务基础架构中使用消息代理的概念。
https://dev.to/matteojoliveau/microservices-communications-why-you-should-switch-to-message-queues--48ia

答案 2 :(得分:0)

即使在这篇文章中,关于如何在微服务之间共享模型以及如何进行通信也有不同的意见。我会说干净的解决方案在这篇文章中得到了解释。

Micro services: shared library vs code duplication