两个微服务之间的通信

Ser*_*tTR 43 java spring spring-boot jhipster microservices

我正在创建一个具有微服务架构的项目.我创建了两个微服务.

其中一个是产品实体,另一个是票据实体.它们有自己的端点,它们通过网关连接在一起(我使用的是jhipster微服务架构).

bill-ms应该访问产品列表.我想知道如何在这两个ms之间进行通信.我脑子里有三种方法:

  1. 从bill-ms发送请求到队列 - 就像rabbitMQ一样,从product-ms获取带有这些id的这些产品(我不知道这是什么瓶颈)

  2. 向网关发送请求以获取产品服务并从那里获取产品(由于它们之间的数据大小而我担心延迟,因此我不直接接触数据库所以我总是依赖于网关)

  3. 我可以在bill-ms中复制存储库,服务和实体(这是一种丑陋的方式,我认为它打破了ms架构的规则并且维护非常困难)

如果您有任何其他方法,我感谢您与我分享.

编辑

  1. 现在我知道瓶颈是什么:说有3个bill-ms实例,rabbitMQ如何决定响应哪个实例?或者我应该怎么说功能" 给我一个bill-ms的免费实例来订阅来自rabbitMQ的请求 "以进行负载平衡.

Kaj*_*Kaj 38

我不确定我要回答的是正确的方法.我还在学习自己..但我可以告诉你我是如何实现我的微服务尝试的..

首先,我使用此博客开始使用HTTP基于通信的微服务.这很好,但问题是,您在服务之间创建dependendies.服务A需要知道服务B并且需要直接调用它(当然是通过服务发现等).这是您在开发微服务时通常要避免的.

我最近开始的另一种方法是使用a message bus.这实际上是你在问题中提到的第三个选项.

我有一个服务A,存储人(只是一个例子).该服务在创建新人时所做的是:它eventRabbitMQ公共汽车上发送:personCreatedEvent.如果有任何其他服务对此类事件感兴趣,他们可以订阅它们.这些感兴趣的服务将他们感兴趣的相关信息保存在他们自己的数据存储中.

使用最后一种方法,您的服务之间并不存在真正的依赖关系,因为它们不会直接相互通信.服务A不知道服务B,因为B只是将事件发送给RabbitMQ对这些事件感兴趣的服务,反之亦然.

当然,您在服务上的数据存储之间存在重复.但这也是有利可图的,例如,服务B不需要使用与服务A相同的模式或数据存储机制.它仅以最适合此服务的方式存储相关信息.