• springcloud ----ribbon


    ribbon是基于Netflix ribbon实现的一套 客户端 负载均衡的工具

    ribbon配置:

     因为ribbon是客户端的负载均衡工具,所以是在服务消费者这一方配置

    1 pom文件依赖

    <!-- Ribbon相关 -->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-eureka</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-ribbon</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-config</artifactId>
    		</dependency>

    ribbon需要与eureka整合,不与eureka整合,怎么知道那个eureka实例负载均衡小呢。

    2 配置文件配置 追加eureka服务注册地址,将微服务作为注册到eureka中,也别忘了在启动类上架@EnableEurekaClient,标志eureka客户端

    eureka:
      client:
        register-with-eureka: false
        service-url: 
          defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,
    http://eureka7003.com:7003/eureka/ 

    3 此客户端中,这里只用restTemplate请求服务端暴露的地址,想要在客户端实现负载均衡,需要在restTemplate的bean创建上加@LoadBalanced注解,表示开启负载均衡

        @Bean
    	@LoadBalanced
    	public RestTemplate getRestTemplate() {
    		return new RestTemplate();
    	}

    最后就可以测试了,之前在客户端的controller中,访问服务端的地址是写死为http://localhost:8001的,就是直接访问客户端的,现在改为http://MICROSERVICECLOUD-DEPT,直接通过服务名来访问。现在的访问路径变成了,客户端发起请求,请求到达eureka服务中心,服务中心通过请求路径中的服务名,转发给对应服务的某个实例,因为这里启动了三个eureka中心。至此,ribbon简单配置成功

    然后 有创建了2个微服务提供者,这两个服务提供者注册为同一个服务名,把eureka集群启动(三个eureka实例),把三个微服务提供者启动,每个都注册到这个三个eureka实例中,最后把微服务消费者启动,就可以测试真正的负载均衡了。前面因为只有一个微服务提供者,无论怎么负载均衡都是在同一个提供者上面。现在启动了三个微服务提供者,就可以看到真正的负载均衡的效果了。

    ribbon的负载均衡算法

       ribbon默认的负载均衡算法是轮训算法,即所有的微服务提供者轮流来处理请求。

       springcloud中的ribbon默认提供7中负载均衡算法,如下

     

     那么如何切换这些算法呢,很简单,在客户端的配置类里面,定义想要使用的算法的bean即可,这个定义的bean会覆盖默认的轮训算法

    如下 创建这样一个bean之后,ribbon就会使用随机算法

    客制化负载均衡算法,为某个微服务单独定义不同的算法

    首先,在客户端主启动类上添加@Ribbon注解

    @RibbonClient(name="MICROSERVICECLOUD-DEPT",configuration=MyRule.class)

    需要注意的是这个自定义的负载均衡算法类不能放在@ComponentScan所扫描的包及子包下,否则的话就会被所有Ribbon客户端共享,就不是name属性中配置的这一个微服务使用这一中算法了,所有的微服务都会使用该算法

    MyRule类如下

    @Configuration
    public class MyRule {
    	@Bean()
    	public IRule myRule() {
    		return new RandomRule();
    	}
    
    }

    另外,ribbon还可以自定义负载均衡算法,只需将使用的负载均衡的bean换成自己定义的就行,自己定义的rule类只需实现AbstractLoadBalancerRule类,就可自定义负载均衡算法

  • 相关阅读:
    逆向学习中扫雷第一阶段小结
    破解基础篇三
    逆向方面学习实践安排
    破解基础篇二
    20159320《网络攻防实践》第9周视频总结
    20159320《网络攻防实践》第9周学习总结
    20159320《网络攻防实践》第9周教材总结
    破解基础篇之第一部分
    20159320《网络攻防实践》第8周视频总结
    20159320《网络攻防实践》第8周学习总结
  • 原文地址:https://www.cnblogs.com/labtabhub/p/12164205.html
Copyright © 2020-2023  润新知