我正在开发一个将单一的web应用程序转换为微服务的个人项目(每个服务都有自己的数据库)。互通微服务 - 如何?
此时整体后端由NodeJS制成并能够回复REST请求。 当我开始将应用程序分成多个服务时,我遇到了下一个问题:如何使它们之间的通信很好?
首先我试图用REST调用下一个例子: “注册服务”,以坚持它插入有趣的事情到它的数据库,然后向前(HTTP POST)的用户信息的“用户服务”进入“用户”数据库。 从这个例子我们有2个服务,因此2个数据库。
我意识到在这个时刻这不是一个好选择。因为我的“注册服务”取决于“用户服务”。它们有些耦合,这是微服务概念的反模式(从我读到的内容来看)。
第二个想法是使用类似RabbitMQ的消息中介。 “注册服务”仍将有趣的事情插入到自己的数据库中,并将用户信息作为数据发布在队列中。 “用户服务”使用此消息并将数据保存到其“用户”数据库中。通过使用这个概念,这两种服务都是完全孤立的,并且可能是一个好主意。
但是,如何将响应发送给客户端(谁提出了“注册服务”的请求)。有了第一个想法,我们可以发送“200,一切都好!”或400.这不是问题。有了第二个想法,我们不知道消费者(“用户服务”)是否坚持用户数据,那么我需要回复客户端?
我有与Web应用程序的商店端相同的问题。客户将他想购买的产品发布到“订购服务”。如果用户有足够的钱,这个人需要检查他已经进入“用户服务”的虚拟货币,然后将产品细节转发到“交付服务”。如何用完全隔离的服务做到这一点?
我不想使用客户端的http请求时间在消息代理上进行异步请求/回复。
我希望你们中的一些人能够启发我。
阅读此:http://stackoverflow.com/questions/30213456/transactions-across-rest-microservices –