我正在开展一个个人项目,即将单片Web应用程序转换为微服务(每个服务都有自己的数据库).
此时,整体后端由NodeJS构成,并且能够回复REST请求.当我开始将应用程序拆分为多个服务时,我遇到了下一个问题:如何很好地进行它们之间的通信?
首先,我尝试在下一个示例中使用REST调用:"注册服务"将有趣的东西插入其数据库,然后将用户信息转发(HTTP POST)到"用户服务",以便将其保存到"用户"数据库中.从这个例子我们有2个服务,因此有2个数据库.
我意识到这一刻并不是一个好的选择.因为我的"注册服务"取决于"用户服务".它们是一种耦合,这是微服务概念的反模式(从我读到的).
第二个想法是使用像RabbitMQ这样的消息代理."注册服务"仍然将有趣的东西插入到自己的数据库中,并将用户信息作为数据发布到队列中."用户服务"使用此消息并将数据持久保存到其"用户"数据库中.通过使用这个概念,两种服务都是完全隔离的,可能是一个好主意.
但是,发送给客户端的响应如何(谁向"注册服务"发出请求).根据第一个想法,我们可以发送"200,一切都好!" 或400.这不是问题.根据第二个想法,我们不知道消费者("用户服务")是否持久保存用户数据,那么我需要回复客户端?
我对Web应用程序的商店方面存在同样的问题.客户将他想要购买的产品发布到"订购服务".如果用户有足够的钱,这个需要检查他已经进入"用户服务"的虚拟货币然后将产品细节转发到"交付服务".如何通过完全隔离的服务实现这一目标?
我不想使用客户端的http请求时间在消息代理上进行异步请求/回复.
我希望你们中的一些人能够启发我.