两个微服务之间的通信

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

其中一个用于产品实体,另一个用于票据实体。它们有自己的端点,并且它们与网关连接在一起(我正在使用jhipster微服务架构)。

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

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

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

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

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

编辑

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

答案 1

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

首先,我使用这个博客从基于通信的微服务开始。这工作正常,但问题是,您在服务之间创建了依赖关系。服务 A 需要知道服务 B,并且需要直接调用它(当然是通过服务发现等)。这是您在开发微服务时通常试图避免的。HTTP

我最近开始使用的另一种方法是使用 .这实际上是您在问题中触及的第3个选项。message bus

我有一个服务A,它存储人员(只是一个例子)。当服务创建新人员时,它执行的操作是:它在总线上发送一个:。如果有任何其他服务对此类事件感兴趣,它们可以订阅它们。这些感兴趣的服务将他们感兴趣的相关信息保存在自己的数据存储中。eventRabbitMQpersonCreatedEvent

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

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


答案 2

您是否看过 http://stytex.de/blog/2016/03/25/jhipster3-microservice-tutorial/ 第2部分:服务间通信部分。它将引导您完成如何实现它的具体示例


推荐