zoukankan      html  css  js  c++  java
  • springcloud--ribbo(负载均衡)

    ribbo:是Netflix公司开源的一个负载均衡的项目,是一个客户端负载均衡器,运行在客户端上。

    实际运用案例(基于springcloud入门案例):

    一、新建Module:springcloud-consumer-ribbon

      1:添加依赖

    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- 热部署 -->
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    </dependency>

    <!-- eureka客户端 -->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>

    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

    </dependencies>

      2:修改配置文件(在src/main/resources下创建application.yml文件):

        ①配置端口号:

           server:

            port: 6001

        ②配置注册中心eureka:

           eureka:
            client:
              service-url:
                defaultZone: http://localhost:7001/eureka
            instance:
              instance-id: consumer6001
            prefer-ip-address: true
           spring:
             application:
              name: consumer1

      3:启动类(App): 

          @SpringBootApplication
          @EnableEurekaClient
          @EnableDiscoveryClient
          @RibbonClients
          @Configuration
          public class App {
            public static void main(String[] args) {
              SpringApplication.run(App.class, args);
            }
          }

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

      3、控制器(UserController):

        @Autowired

        private RestTemplate restTemplate;

        @RequestMapping("/hi")
        public Map<String,Object> hello(){
          return restTemplate.getForObject("http://provider-one/hello", Map.class);
        }

          provider-one:是你提供者配置文件中spring.application.name的值

          hello:是你提供者的提供的方法名字。

    提供的负载均衡算法:

    RoundRobinRule(轮询算法):对所有服务器轮流访问
    RandomRule(随机算法) :随机选择服务器
    RetryRule():先按照RoundRobinRule的策略获取服务,如果获取失败则在制定时间内进行重试,获取可用的服务。
    AvailabilityFilteringRule():会先过滤由于多次访问故障而处于断路器跳闸状态的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询策略进行访问
    WeightedResponseTimeRule():根据平均响应的时间计算所有服务的权重,响应时间越快服务权重越大被选中的概率越高,刚启动时如果统计信息不足,则使用RoundRobinRule策略,等统计信息足够会切换到WeightedResponseTimeRule
    BestAviableRule():会先过滤掉由于多次访问故障而处于断路器跳闸状态的服务,然后选择一个并发量最小的服务
    ZoneAvoidanceRule():默认规则,符合判断server所在区域的性能和server的可用性选择服务器

    修改负载均衡算法(2种):

      添加一个方法:

    IRule loadBalanceRule(){

      return new RandomRule();

    }

      修改配置文件:

    MICRO-SERVICE:服务名字

      ribbon:

        NFLoadBanlanceRuleClassName:

     实现负载均衡:

    启动多个提供者(端口号不一致)

  • 相关阅读:
    抖动代码
    WSAWaitForMultipleEvents()
    udp 不需要 listen
    WSAEventSelect
    C++ Win32控制台应用程序捕捉关闭事件
    玩转Win32开发(2):完整的开发流程
    win32线程池代码(WinApi/C++)
    又线程类封装
    Win2 Socket(套接字)相关 API
    Win32函数Sleep的精度测试
  • 原文地址:https://www.cnblogs.com/niexinlei/p/9712122.html
Copyright © 2011-2022 走看看