zoukankan      html  css  js  c++  java
  • springCloud初识2-负载均衡Ribbon

    负载均衡Ribbon

    Ribbon是Netflix 发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。为Ribbon配置服务提供者地址列表后,Ribbon 就可基于某种负载均衡算法,自动地帮助服务泌费者去请求。
    Ribbon 默认为我们提供了很多的负载均衡算法,例如轮询(一个一个轮下去到结尾又从头开始)、随机等。当然,我们也可为Ribbon实现自定义的负载均衡算法。

    基本使用

    1--引入启动器(消费方引入)

    eureka默认集成了ribbon,引入了eureka后可以不用再引入ribbon
    

    2--覆盖默认配置

    可不用覆盖任何配置也可以使用
    

    3--引导类启用组件(消费方开启)

    package com.xiaoai.service;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableDiscoveryClient  //启用eureka客户端,@EnableEurekaClient也可以
    public class XiaoaiServiceConsumerApplication {
    
    	@Bean
    	@LoadBalanced  //开启ribbon负载均衡
    	public RestTemplate restTemplate(){
    		return new RestTemplate();
    	}
    
    	public static void main(String[] args) {
    		SpringApplication.run(XiaoaiServiceConsumerApplication.class, args);
    	}
    }
    
    

    4--消费方控制器方法消费

    package com.xiaoai.service.controller;
    
    import com.xiaoai.service.pojo.User;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.cloud.client.ServiceInstance;
    import org.springframework.cloud.client.discovery.DiscoveryClient;
    import org.springframework.web.bind.annotation.*;
    import org.springframework.web.client.RestTemplate;
    
    import java.util.List;
    
    @RestController
    @RequestMapping("/consumer/user")
    public class UserController {
    
    //    //--------------------------------------------消费方传统方式调用提供方
    //    @Autowired
    //    private RestTemplate restTemplate;
    
    //    @GetMapping
    //    @ResponseBody
    //    public User queryUserById(@RequestParam("id")Long id){
    //        return this.restTemplate.getForObject("http://localhost:8081/user/"+id,User.class);
    //    }
    
    //    //--------------------------------------------改造消费方,解决地址硬编码问题
    //    @Autowired
    //    private RestTemplate restTemplate;
    //    @Autowired
    //    private DiscoveryClient discoveryClient;  //最早的时候服务发现注册都是通过DiscoveryClient来实现的,随着版本变迁把DiscoveryClient服务注册抽离出来变成了ServiceRegistry抽象,专门负责服务注册,DiscoveryClient专门负责服务发现
    //
    //    @GetMapping
    //    @ResponseBody
    //    public User queryUserById(@RequestParam("id")Long id){
    //        List<ServiceInstance> instances = discoveryClient.getInstances("service-provider"); //通过serviceId获取实例列表
    //        ServiceInstance instance = instances.get(0); //获取一个服务实例,由于这里只运行了一个提供服务,直接获取列表第一个即可
    //        return this.restTemplate.getForObject("http://" + instance.getHost() + ":" + instance.getPort() + "/user/"+id,User.class); //通过实例拼接对应的url
    //    }
    
        //-----------------------------------------------改造消费方,解决地址硬编码问题    启用ribbon负载均衡后
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping
        @ResponseBody
        public User queryUserById(@RequestParam("id")Long id){
            return this.restTemplate.getForObject("http://service-provider/user/"+id,User.class);
        }
    
    }
    

    定义负载均衡策略

    可实现 Irule接口自定义策略
    默认已经实现了好几种

    如何设置默认某一种策略?
    可以在消费服务端application.yml配置文件加入配置

    service- provider:  # 这是服务提供方的服务id即之前自己注册服务时定义的名称
      ribbon:
        NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule  
    
  • 相关阅读:
    Verilog非阻塞赋值的仿真/综合问题 (Nonblocking Assignments in Verilog Synthesis)上
    异步FIFO结构及FPGA设计 跨时钟域设计
    FPGA管脚分配需要考虑的因素
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 上篇)
    An Introduction to Delta Sigma Converters (DeltaSigma转换器 下篇)
    中国通信简史 (下)
    谈谈德国大学的电子专业
    中国通信简史 (上)
    Verilog学习笔记
    Verilog非阻塞赋值的仿真/综合问题(Nonblocking Assignments in Verilog Synthesis) 下
  • 原文地址:https://www.cnblogs.com/xiaoaiying/p/13432839.html
Copyright © 2011-2022 走看看