欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springcloud学习笔记之负载均衡

程序员文章站 2024-01-31 23:01:58
...

springcloud学习笔记之负载均衡

一、ribbon

ribbon是一套客户端负载均衡的工具,为客户端软件提供负载均衡和服务调用。

负载均衡:将客户的请求分派到多个服务器上,从而达到系统的高可用。

Netflix-eureka已经集成了ribbon
springcloud学习笔记之负载均衡
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.负载均衡策略
springcloud学习笔记之负载均衡
4.替换负载均衡策略

注意:不能放在@ComponentScan所能扫描到的包及子类springcloud学习笔记之负载均衡

定义为随即策略

@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接口的第几次请求数%服务器集权的总数量=时间调用的服务器下标

服务器集权的总数量=服务发现通过服务名称获取微服务实例