springcloud学习笔记之负载均衡
程序员文章站
2024-01-31 23:01:58
...
springcloud学习笔记之负载均衡
一、ribbon
ribbon是一套客户端负载均衡的工具,为客户端软件提供负载均衡和服务调用。
负载均衡:将客户的请求分派到多个服务器上,从而达到系统的高可用。
Netflix-eureka已经集成了ribbon
1.ribbon与restTemplate组合实现负载均衡
配置restTemplate添加@LoadBalanced使用负载均衡
@Configuration
public class RestTemplatetConfig {
@Bean
@LoadBalanced
public RestTemplate getRestTemplate(){
return new RestTemplate();
}
}
负载均衡调用服务
@RestController
public class OrderController {
public static final String PAYMENT_URL="http://CLOUD-PAYMENT-SERVICE";
@Autowired
private RestTemplate restTemplate;
@PostMapping("/consumer/payment/create")
public CommonResult<Payment> create(@RequestBody Payment payment){
return restTemplate.postForObject(PAYMENT_URL+"/payment/create",payment,CommonResult.class);
}
@GetMapping("/consumer/payment/get/{id}")
public CommonResult<Payment> getPayment(@PathVariable("id") Long id){
return restTemplate.getForObject(PAYMENT_URL+"/payment/get/"+id,CommonResult.class);
}
}
2.restTemplate.getForObject()与restTemplate.getForEntity()区别
restTemplate.getForObject():返回对象为响应体中数据转化成的对象,可以理解为json
restTemplate.getForEntity():返回对象为ResponseEntity,包含响应头、响应体、状态码等信息
3.负载均衡策略
4.替换负载均衡策略
注意:不能放在@ComponentScan所能扫描到的包及子类
定义为随即策略
@Configuration
public class MyRule {
@Bean
public IRule myRule(){
return new RandomRule();
}
}
主启动类添加@RibbonClient
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MyRule.class)
public class OrderMain81 {
public static void main(String[] args) {
SpringApplication.run(OrderMain81.class);
}
}
表示访问CLOUD-PAYMENT-SERVICE服务时使用MyRule定义的负载均衡策略
5.负载均衡算*询算法
rest接口的第几次请求数%服务器集权的总数量=时间调用的服务器下标
服务器集权的总数量=服务发现通过服务名称获取微服务实例