我正在解决微服务与消息架构之间的通信。
我们说我有一个传统的应用程序,并且有User
,Post
Video
个模块。
您可以使用它创建帖子和视频,但在此之前,我需要将用户名转换为用户ID。
一旦我将模块拆分为微服务,我就无法将它们链接在一起,而是直接访问微服务。
如果我想将用户名转换为ID,
我可以通过Messaging调用User
服务中的Post
服务,到目前为止一直很好。
但问题在于:
如何收到已转换的用户ID ?将另一条消息发送回Post
服务并继续下一步?
如果我想从Video
服务执行此操作该怎么办?我需要在User
服务中为它创建另一个功能吗?
如果我的服务越来越多,这将是很多功能吗?
我认为这不是消息传递架构的工作方式,但我不知道如何在没有消息传递的情况下与其他服务进行通信。
(或者我应该chain them together in the API Gateway所以我不需要消息传递架构?)。
答案 0 :(得分:1)
根据我的理解,您有3项服务:用户,发布,视频。 在Post和Video服务中,您需要实现将用户名作为参数的命令,而不是userId。并且因为这些服务中的所有数据都与userId相关,所以您考虑先调用用户服务来询问相关的userId。
答案是:您应该在每个需要此服务的服务中保存username-userId关联。
在您的特定情况下,Post和Video服务都应该从User Service订阅NewUserRegistered事件并维护自己的username-userid映射。这允许您避免从其他服务额外调用用户服务。