gpt4 book ai didi

node.js - 相互通信微服务 - 如何?

转载 作者:搜寻专家 更新时间:2023-10-31 22:20:45 25 4
gpt4 key购买 nike

我正在从事一个个人项目,该项目是将单体式 Web 应用程序转换为微服务(每个服务都有自己的数据库)。

此刻,单体后端是用 NodeJS 制作的,能够回复 REST 请求。当我开始将应用程序拆分为多个服务时,我遇到了下一个问题:如何使它们之间的通信很好?

首先,我尝试在下一个示例中使用 REST 调用:“注册服务”将有趣的东西插入到它的数据库中,然后将用户信息转发(HTTP POST)到“用户服务”,以便将其持久化到“用户”数据库中。在此示例中,我们有 2 个服务,因此有 2 个数据库。

这一刻我意识到这不是一个好的选择。因为我的“注册服务”依赖于“用户服务”。它们有点耦合,这是微服务概念的反模式(根据我的阅读)。

第二个想法是使用像 RabbitMQ 这样的消息代理。 “注册服务”仍然在自己的数据库中插入有趣的东西,并以用户信息为数据在队列中发布消息。 “用户服务”使用此消息并将数据持久保存到其“用户”数据库中。通过使用这个概念,这两个服务是完全隔离的,这可能是个好主意。

但是,发送给客户端的响应如何(向“注册服务”发出请求的人)。有了第一个想法,我们可以发送“200,一切正常!”或400。这不是问题。第二种想法,我们不知道消费者(“用户服务”)是否持久化了用户数据,那么我需要回复客户端什么?

我在网络应用程序的商店方面遇到了同样的问题。客户将他想购买的产品发布到“订单服务”。这个人需要将他拥有的虚拟货币检查到“用户服务”,如果用户有足够的钱,然后将产品详细信息转发到“交付服务”。如何使用完全隔离的服务做到这一点?

我不想使用来自客户端的 http 请求时间在消息代理上进行异步请求/回复。

希望大家多多指教。

最佳答案

Tom 建议了一个 pretty good link ,其中投票最多的答案及其推理和解决方案是您可以信赖的答案。您的具体问题可能源于注册服务和用户服务是分开的。也许他们不应该?

理想情况下,Register 服务应该将“UserRegistered”事件发布到总线并返回 200,仅此而已。它根本不应该关心(知道)该事件的任何订阅者。

关于node.js - 相互通信微服务 - 如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41636566/

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