一、负载均衡介绍
1.1、问题描述
上篇文章中远程调用的代码如下:
List<ServiceInstance> instances = discoveryClient.getInstances("product-service"); // 服务可能有多个,获取第一个
EurekaServiceInstance instance = (EurekaServiceInstance) instances.get(0);
- 根据应用名称获取了服务实例列表
- 从列表中选择了一个服务实例
**思考:**如果一个服务对应多个实例呢?流量是否可以合理的分配到多个实例呢?
现象观察: 我们再启动 2 个 product-service 实例。选中要启动的服务,右键选择 Copy Configuration,在弹出的框中选择 Modify options -> Add VM options,添加 VM options: -Dserver.port=9091(9091 为服务启动的端口号,根据自己的情况进行修改)。
现在 IDEA 的 Service 窗口就会多出来一个启动配置,右键启动服务就可以。同样的操作,再启动 1 个实例,共启动 3 个服务。
观察 Eureka,可以看到 product-service 下有三个实例。
解决方案: 我们可以对上述代码进行简单修改:
private static AtomicInteger atomicInteger = new AtomicInteger(1);
private static List<ServiceInstance> instances;
@PostConstruct
public void init() {
instances = discoveryClient.getInstances();
}
OrderInfo {
orderMapper.selectOrderById(orderId);
atomicInteger.getAndIncrement() % instances.size();
instances.get(index);
log.info(instance.getInstanceId());
instance.getUri() + + orderInfo.getProductId();
restTemplate.getForObject(url, ProductInfo.class);
orderInfo.setProductInfo(productInfo);
orderInfo;
}


