更改springboot版本
springboot版本有的与ribbon不兼容,因此更改springboot版本如下:
在父项目内将version更新到2.3.8
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.9.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
一、手动实现负载均衡
手动实现负载均衡,轮询,随机逻辑等。
二、使用Ribbon实现负载均衡
Ribbon+RestTemplate
规则名称 | 特点 |
---|---|
AvailabilityFilteringRule | 过滤掉一直连接失败的被标记为circuit tripped 的后端Server,并过滤掉那些高并发的后端Server或者使用一个AvailabilityPredicate来包含过滤Server的逻辑,其实就是检查status里记录的戈戈Server的运行状态 |
BestAvailableRule | 选择一个最小的并发请求的Server,这个考察Server,如果Server被tripped了,则跳过 |
RandomRule | 随机选择一个Server |
ResponseTineWeightedRule | 已废弃,作用同WeightedResponseTimeRule |
RetryRule | 对选定的负载均衡策略机上重试机制,在一个配置时间段内当选择Server不成功,则一直尝试使用subRule的方式选择一个可用的server |
RoundRobinRule | 轮询选择,轮询index,选择index对应位置的Server |
WeightedResponseTimeRule | 根据响应时间加权,响应时间越长,权重越少、被选中的可能性越低 |
ZoneAviodanceRule | 复合判断Server所Zone的性能和Server的可用性选择Server,在没有Zone的环境下,类似于轮询(RoundRobinRule) |
三、程序内实现负载均衡
order调用product,order实现负载均衡
pom.xml引入:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
order-service服务的启动类加入 @LoadBalanced
package com.neutech.shopserver.order;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
@SpringBootApplication
//@EnableFeignClients
public class OrderServiceApplication {
public static void main(String[] args) {
SpringApplication.run(OrderServiceApplication.class, args);
}
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(RestTemplateBuilder restTemplateBuilder) {
return restTemplateBuilder.build();
}
}