zoukankan      html  css  js  c++  java
  • SpringCloud学习第三篇:Ribbon负载均衡(Hoxton.SR4)

    一、负载均衡是什么?

      在以前,项目访问量非常大的时候,往往一台服务器无法承载这么大的压力。一般采用的是服务器集群来缓解服务器压力。但是多个服务器又这么连接那?这时候就可以通过负载均衡来实现。负载均衡:就是通过一个代理服务器,代理服务器在通过算法来访问服务器集群中的一台服务器。最初我们实现负载均衡的方式是使用Nginx,但是SpringCloud组件中提供了SpringCloud Netflix Ribbon来实现负载均衡

    二、Riboon简介

      Ribbon是Netflix发布的负载均衡器,它有助于控制HTTP和TCP的客户端的行为。为Ribbon配置服务提供者地址后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多负载均衡算法,例如轮询、随机等。在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,请求其中一个服务提供者实例。如图。
    在这里插入图片描述

    三、Riboon学习

    3.1Eureka的搭建
    使用前面的搭建的项目

    3.2Ribbon搭建

    • maven
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
        </dependencies>
    
    • 配置
    server:
      port: 1103
    spring:
      application:
        name: ribbon
    eureka:
      client:
        service-url:
          defaultZone: http://localhost:1101/eureka/
      instance:
        hostname: localhost
        prefer-ip-address: true
        instance-id: ${spring.cloud.client.ip-address}:${server.port}
    
    
    • 启动入口
    @SpringBootApplication
    @EnableDiscoveryClient
    //@RibbonClient 单个定义
    //多个定义
    @RibbonClients({
            @RibbonClient(name="ribbon")
    })
    public class StartApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(StartApplication.class, args);
        }
        //声明RestTemplate
        //开启负载均衡的功能
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
    }
    
    • 实现服务的调用
      简单点就将调用的服务也写在本工程里面
    @RestController
    public class ClientController {
        @Autowired
        private RestTemplate restTemplate;
    
        @GetMapping("index")
        public String index() {
            User user = new User();
            user.setId(1);
            user.setName("张三");
            return restTemplate.postForObject("http://ribbon/demo", user, String.class);
        }
    
        @Value("${server.port}")
        private Integer port;
    
        @PostMapping("demo")
        public String demo(@RequestBody User user) {
            return "hello来自哪个服务器:" + user.toString() + port;
        }
    
    }
    @Data
    class User {
        private int id;
        private String name;
    }
    

    3.2Demo演示
    启动Eureka、ribbon(启动两个)
    访问:http://IP:1103/index 即可看到效果

    四、Ribbon和Nginx的区别

    • Nginx:
      属于服务器端的负载均衡。nginx是客户端所有请求统一交给nginx,由nginx进行实现负载均衡请求转发,属于服务器端负载均衡。既请求有nginx服务器端进行转发。
    • Ribbon:
      属于客户端的负载均衡。Ribbon是从注册中心服务器端上获取服务注册信息列表,缓存到本地,然后在本地实现轮训负载均衡策略。既在客户端实现负载均衡。
  • 相关阅读:
    PLSQL设置中文
    新建oracle实例
    eclipse中导入项目后中文成乱码解决办法
    安装oracle
    配置java环境变量
    学习springMVC实例1——配置和跳转到HelloWorld
    突破变态限制快捷方式提权法
    对象的内存布局
    XMl转Map-map调用公共模板
    对象的创建
  • 原文地址:https://www.cnblogs.com/yangk1996/p/12663485.html
Copyright © 2011-2022 走看看