【发布时间】:2018-08-20 19:11:18
【问题描述】:
我正在构建一个 java/spring 微服务,其中每个服务都有自己的数据库。假设我有一个用户服务,它将用户信息存储在一个表中,一个订单服务仅存储订购者的用户名,如下所述:-
User Service (UserService Database - User Table )
id firstName lastName username age
1 Chris Brown c.brown 20
2 John Doe j.doe 25
并订购如下服务
Order Service (OrderService Database - Order Table )
id username productName productPrice OrderDate
1 c.brown Sony Mic 100$ 20-08-2018
2 j.doe Television j.doe 11-07-2018
问题是在列出订单时从用户服务获取名字和姓氏的最佳方法是什么。我知道微服务应该通过 Rest API 进行通信,但是如果我有 1000 个有订单的用户,我将不得不循环 1000 次以获取 firstName 和 lastName 或将用户名作为数组,这可能是昂贵的活动。
我已阅读有关使用 CQRS 和事件源的信息,但不确定如何在这种情况下最好地应用它。
【问题讨论】:
-
如果服务在同一个数据库实例上运行,您可以通过用户名加入(确保字段在两个表中都有索引)或在订单数据库中保留一些名字/姓氏的副本,否则使用任何缓存首先加载用户/姓氏。
-
Order和User是单独的微服务吗? -
@MehrajMalik ,是的,单独的微服务和单独的数据库
-
@GeorgyGobozov ,感谢您的反馈,会考虑这种方法..
标签: java spring spring-boot microservices cqrs