gpt4 book ai didi

java - 两个微服务之间的通信

转载 作者:IT老高 更新时间:2023-10-28 13:04:10 28 4
gpt4 key购买 nike

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

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

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

  1. 从 bill-ms 向队列发送请求 - 比如 rabbitMQ,从 product-ms 获取这些具有这些 id 的产品(我不知道这是什么瓶颈)

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

  3. 我可以在bill-ms中复制repositories、services和entities(这是一种丑陋的方式,而且我认为它违反了ms-architecture的规则并且维护起来非常困难)

如果你有任何其他方法,我很感激你与我分享。

编辑

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

最佳答案

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

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

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

我有一个服务 A,用于存储人员(只是一个示例)。该服务在创建新人员时所做的是:它在 RabbitMQ 总线上发送一个 event:personCreatedEvent。如果有任何其他服务对此类事件感兴趣,他们可以订阅。这些感兴趣的服务将他们感兴趣的相关信息保存在自己的数据存储中。

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

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

关于java - 两个微服务之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36701111/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com