1

我正在使用消息传递架构解决微服务之间的通信。

假设我有一个传统应用程序,并且有User模块Post Video

您可以使用它创建帖子、视频,但在此之前,我需要将用户名转换为用户 ID。

在此处输入图像描述

一旦我将模块拆分为微服务,我就无法将它们链接在一起,而是直接访问微服务。

在此处输入图像描述

如果我想将用户名转换为 ID,

我可以通过Messaging调用User服务中的Post服务,到目前为止一切顺利。

在此处输入图像描述

但问题是:

  • 如何接收转换后的用户 ID?向Post服务发送另一条消息并继续下一步?

  • 如果我想从Video服务中执行此操作怎么办?我需要在User服务中为它创建另一个功能吗?

如果我得到越来越多的服务,那将是很多功能,对吗?

我认为这不是消息传递架构的工作方式,但我不知道如何在没有消息传递的情况下与其他服务进行通信。

(或者我应该在 API 网关中将它们链接在一起,这样我就不需要消息传递架构了吗?)

在此处输入图像描述

4

1 回答 1

1

据我了解,您有 3 种服务:用户、帖子、视频。在 Post 和 Video 服务中,您需要实现将用户名作为参数但不是 userId 的命令。并且由于这些服务中的所有数据都由 userId 关联,因此您考虑首先调用用户服务来询问相关的 userId。

答案是:您应该在每个需要它的服务中保存用户名-用户 ID 关联。

在您的特定情况下,Post 和 Video 服务都应从 User 服务订阅 NewUserRegistered 事件并维护自己的用户名-用户 ID 映射。这使您可以避免从其他服务对用户服务的额外调用。

于 2016-12-27T20:48:32.253 回答