前段时间做项目遇到这么种情况,需要调用一个批量查询接口,GET请求的 ,比如根据用户id批量查询用户信息的,接口提供方提供的就是GET请求的,然而我们一次要查询几万个用户,这样请求的结果就是接口直接挂掉,因为GET请求没法传递那么多数据,最后的解决方案是人为地进行分页
private List<UserDto> queryUserInfo(List<Integer> userIds) {
Integer length = userIds.size();
Integer page = 1;
Integer size = CommonConstants.QUERY_USER_LIMIT_MAX;//这里做成配置
if (length > size) {
page = length / size + (length % size > 0 ? 1 : 0);
}
List<UserDto> userInfos = new ArrayList<>();
for (int i = 1; i <= page; i++) {
List<Integer> newList = userIds.subList((i - 1) * size, page == i ? length : size * i);
try {
//批量获取用户信息
List<UserDto> result = userAgentService.getUserInfoByIds(newList);
userInfos.addAll(result);
} catch (Exception er) {
logger.error("queryUserInfo调用用户接口获取信息失败 :[{}]", JsonUtil.object2JSON(newList), er.getMessage());
}
}
return userInfos;
}
这样算是解决问题了,大家有更好的方法可以分享出来。