zoukankan      html  css  js  c++  java
  • springcloud(4)ribbon负载均衡

    负载均衡即是将用户的请求平摊的分配到多个服务上,从而达到高可用的目的。

    一般的负载均衡应用采取的是收集全部请求进行集中式的分配,而ribbon是从服务中心获取地址,为消费者挑选合适的对象,属于进程式的负载均衡是相对于消费者,从消费者出发的。

    1.ribbon使用

    ribbon作为一个软负载均衡,大部分情况都是和其他应用进行组合,本次采用eureka配置。

    ribbon本身集成在Netflix中,所以有Netflix的jar时候不需要导入额外的ribbon依赖,避免造成依赖版本冲突。

    2.template

    一般ribbon是和template配合使用,首先在配置类中添加loadbalance注解。

    @Configuration
    public class AppConfig {
        /**
         * 注入restTemplate,请用请求rest接口
         * @return
         */
        @Bean
        // 标注此注解后,RestTemplate就具有了客户端负载均衡能力
        // 负载均衡技术依赖于的是Ribbon组件~
        // RestTemplate都塞入一个loadBalancerInterceptor 让其具备有负载均衡的能力
        @LoadBalanced
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }

    在controller中进行测试,用restTemplate测试。

    @RestController
    @Slf4j
    public class OrderController {
        public static final String PAYMENT_URL = "http://CLOUD-PAYMENT-SERVICE";
        @Resource
        private RestTemplate restTemplate;
    
        @GetMapping("/consumer/payment/get/{id}")
        public CommonResult<PayMent> getPayment(@PathVariable("id") Long id){
            return restTemplate.getForObject(PAYMENT_URL + "/payment/get/" + id, CommonResult.class);
        } 
    }

    多次请求此页面的时候,会交替的选择两个集群,这个涉及到负载均衡的规则下面介绍,

    3.负载均衡。

    ribbon涉及到的负载均衡策略有:

     默认情况下是用的轮询模式,即每访问一次更换一个服务提供者,轮询着采用。

    同时自己也可以进行自定义模式,但自己创建的配置类需要注意文件的位置不能和启动类平级或在其子包下。可以采用如下放置。

    附上改变策略模式的配置类,这里换成了随机策略,即每次选择都是随机的服务提供者。

    @Configuration
    public class MySelfRule {
        @Bean
        public IRule myrule(){
            return new RandomRule();
        }
    }

    当然配置类也需要分配给容器管理,最后也是需要在启动类中进行说明。

    @EnableEurekaClient
    @SpringBootApplication
    @RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration = MySelfRule.class)
    public class OrderMain80 {
        public static void main(String[] args) {
            SpringApplication.run(OrderMain80.class,args);
        }
    }

    轮询算法等都是有源码可分析的,有兴趣可自行搜索源码分析。

     本篇所有代码均在GitHub:

  • 相关阅读:
    C语言和指针-回顾02-const
    Linux内核学习-使用exec创建socket
    Archlinux安装和配置
    apt-get install failed
    Insmod module : operation not permitted
    5.2.5.用开发板来调试模块
    5.2.4.最简单的模块源码分析3
    5.2.3.最简单的模块源码分析2
    5.2.1.开启驱动开发之路
    总线,设备,驱动的关系
  • 原文地址:https://www.cnblogs.com/lin530/p/13892141.html
Copyright © 2011-2022 走看看