前不久,我把Mall微服务版本全面升级了 ,在通过Gateway网关调用其他服务的时候,出现了
Service Unavailable
的问题。排查原因时发现作为负载均衡组件的Ribbon被弃用了,作为Netflix开源的一个组件,Ribbon早已进入维护状态。现在推荐使用的是Loadbalancer,今天我们就来聊聊Loadbalancer的使用!
SpringCloud实战电商项目mall-swarm
(8.8k+star)地址:github.com/macrozheng/…
LoadBalancer简介
LoadBalancer是Spring Cloud官方提供的负载均衡组件,可用于替代Ribbon。其使用方式与Ribbon基本兼容,可以从Ribbon进行平滑过渡。
使用
下面介绍下LoadBalancer的基本使用,我们将使用Nacos作为注册中心,通过
nacos-loadbalancer-service
和nacos-user-service
两个服务间的相互调用来进行演示。
负载均衡
我们将使用RestTemplate来演示下LoadBalancer的负载均衡功能。
- 首先在
nacos-loadbalancer-service
模块的pom.xml
文件中添加LoadBalancer相关依赖;
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
复制代码
- 然后创建Java配置类,用于配置
RestTemplate
,同时使用@LoadBalanced
注解赋予其负载均衡能力;
/**
* RestTemplate相关配置
* Created by macro on 2019/8/29.
*/
@Configuration
public class RestTemplateConfig {
@Bean
@ConfigurationProperties(prefix = "rest.template.config")
public HttpComponentsClientHttpRequestFactory customHttpRequestFactory() {
return new HttpComponentsClientHttpRequestFactory();
}
@Bean
@LoadBalanced
public RestTemplate restTemplate() {
return new RestTemplate(customHttpRequestFactory());
}
}
复制代码
- 在
application.yml
中可以使用自定义配置对RestTemplate的调用超时进行配置;
rest:
template:
config: # RestTemplate调用超时配置
connectTimeout: 5000
readTimeout: 5000
复制代码
- 然后在Controller中使用RestTemplate进行远程