2个微服务之间如何实现通信
How to implement communication between 2 micro services
我和我的同事讨论了我们应该如何实现两个微服务之间的通信。目前我们有 2 个相互依赖的微服务,因为我的同事想通过重用用于 REST API.
的 DTO 对象来避免代码重复
在一个完美的世界中,我们不会在服务之间有任何依赖关系,但在我们的例子中这是有道理的。在我看来,这耦合了比复制 DTO 更糟糕的服务。
你会在第二个微服务中复制DTO还是有其他解决方案?
我建议您使用 GRPC(protocol buffer) 在微服务之间进行通信。
- 创建一个包含 protocol buffers 文件的 maven 项目(就像一个项目只包含在其他项目中共享的 DTO)
- 创建多少你喜欢的服务并添加 protobuf 作为依赖,它甚至可以是一个 android 项目
- 使用 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.
中解释了干净的解决方案
我和我的同事讨论了我们应该如何实现两个微服务之间的通信。目前我们有 2 个相互依赖的微服务,因为我的同事想通过重用用于 REST API.
的 DTO 对象来避免代码重复在一个完美的世界中,我们不会在服务之间有任何依赖关系,但在我们的例子中这是有道理的。在我看来,这耦合了比复制 DTO 更糟糕的服务。
你会在第二个微服务中复制DTO还是有其他解决方案?
我建议您使用 GRPC(protocol buffer) 在微服务之间进行通信。
- 创建一个包含 protocol buffers 文件的 maven 项目(就像一个项目只包含在其他项目中共享的 DTO)
- 创建多少你喜欢的服务并添加 protobuf 作为依赖,它甚至可以是一个 android 项目
- 使用 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.
中解释了干净的解决方案