// 处理购物车商品的方法
private void handleCartItems(List<CartV0> vos) {
// 步骤1:从购物车商品中提取商品ID
Set<Long> itemIds = vos.stream()
.map(CartV0::getItemId)
.collect(Collectors.toSet());
// 步骤2:通过向item-service发起HTTP请求来查找商品详细信息
// 步骤2.1:获取item-service的实例列表
List<ServiceInstance> instances = discoveryClient.getInstances("item-service");
if (instances.isEmpty()) {
// 如果没有找到实例,则提前返回
return;
}
// 步骤2.2:通过选择一个随机实例来实现简单的负载均衡
ServiceInstance instance = instances.get((int) (Math.random() * instances.size()));
// 步骤2.3:构造包含商品ID查询参数的URL,并向选定的实例发起HTTP GET请求以检索商品详情
String url = instance.getUri() + "/items?ids=" + String.join(",", itemIds.stream().map(String::valueOf).collect(Collectors.toList()));
// 执行HTTP GET请求
ResponseEntity<List<ItemDTO>> response = restTemplate.exchange(
url,
HttpMethod.GET,
null, // GET请求不需要请求体
new ParameterizedTypeReference<List<ItemDTO>>() {}, // 响应体的类型引用
Map.of("ids", String.join(",", itemIds)) // 查询参数
);
// 步骤2.4:检查响应状态并处理商品详情
if (!response.getStatusCode().is2xxSuccessful()) {
// 如果响应不成功,适当处理
return;
}
// 从响应中获取ItemDTO列表并进一步处理
List<ItemDTO> items = response.getBody();
// 这里可以根据检索到的商品详情进行进一步处理
}
}