一、使用场景
当一个服务具有多个实例时,我们希望流量可以合理的分配到多个实例中,此时我们可以使用 LoadBalancer 来实现负载均衡
基于上篇博客,我们再启动2个product-service实例
接下来演示启动多个实例方法:
1、打开service

2、右键要复制的实例,选择 Copy Configuration
3、改名并点击 modify options
4、选择 add VM options

5、添加 VM options: -Dserver.port = 9091
(9091为服务启动的端口号,可根据自己的情况进行修改)

同样的操作可以再启动多个实例,观察 Eureka,可以看到新启动的实例

但是此时我们启动服务,发现远程调用的都是同一台机器,此时我们可以使用 LoadBalancer 来实现均衡调用多台机器
二、使用方式
1、给 RestTemplate 这个 Bean 添加 @LoadBalanced 注解
package com.linzhixin.order.config;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;
@LoadBalancerClient(name = "product-service", configuration = CustomLoadBalancerConfiguration.class)
@Configuration
public class BeanConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
2、修改 IP 端口号为服务名称
public OrderInfo selectOrderById(Integer orderId) {
OrderInfo orderInfo = orderMapper.selectOrderById(orderId);
//String url = "http://127.0.0.1:9090/product/"+ orderInfo.getProductId();
String url = "http://product-service/product/"+ orderInfo.getProductId();
ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
orderInfo.setProductInfo(productInfo);
return orderInfo;
}
3、按照上述方式启动多个 product-service 实例
4、测试负载均衡
连续多次发起请求:http://127.0.0.1:8080/order/1
观察 product-service 的日志,可以发现请求在多个实例上都有分配
还可以切换负载均衡策略(这里提供参考官网地址:):Spring Cloud LoadBalancer :: Spring Cloud Commons

1461

被折叠的 条评论
为什么被折叠?



