我们有 2 个微服务,第一个用于用户列表,第二个用于状态列表。我们必须显示带有州名称的用户列表。
我认为可能有两种方式:
方法一:
使用循环并通过多次点击状态微服务来获取每个用户的状态。
问题:我们可能有一个超过 10 万用户的列表,我认为访问状态服务 10 万次不太好。
方法 2
获取所有用户和所有状态,然后使用循环合并这两个数据。
问题:因为我们可能有超过 100k 的用户,如果我们有 1,000 个州。然后我们必须执行循环 100k x 1k = 1000k 次。
还有其他方法吗?我不太清楚我们是否可以使用 RabbitMQ 或 Kafka 实现这一目标
截图:
我不是专家,但我认为最好的方法是:
promise.all([getAllUser(), getAllStates()]).then((userList, stateList) => {
let stateDict= {};
for(let userIndex in userList){
let user = userList[userIndex];
if(!stateDict[user['state_id']]){
stateDict[user['state_id']] = stateList.find((item)=> item.id == user['state_id'])
}
//You can change the merging logic for your wish
userList[userIndex]= {...stateDict[user['state_id']],...user }
}
})
这里会有最大值:
100 k + 1k = 101k
循环
我认为您将获得的最佳答案是使用微服务
Pattern: Client-side UI composition
。您将在本文中获得所有解释https://microservices.io/patterns/ui/client-side-ui-composition.html