• spring cloud学习(三)使用Ribbon实现客户端负载均衡


    使用Ribbon实现客户端的负载均衡

    * 个人博客空间 : https://zggdczfr.cn/ *

    Ribbon

    Spring Cloud Netflix Ribbon 是一个客户端负载均衡的组件。

    Ribbon的特点

    • 和Eureka完美整合

    • 支持多种协议-HTTP,TCP,UDP

    • 缓存/批处理

    • built in failure resiliency

    具体请查看官方文档 : https://github.com/Netflix/ribbon/wiki

    整合Ribbon实现客户端的负载均衡

    前期准备

    这里用到了上次的两个demo(服务注册中心和服务提供者)。
    首先,添加服务提供者的服务,这里我将其端口号打印出来能够更加直观地观察到负载均衡的实现:

    @RestController
    public class PrintfController {
    
        @Value("${server.port}")
        private String port;
    
        @RequestMapping("/service")
        public String printf(){
            System.out.println("服务消费者正在使用服务,端口号为 : "+port);
            return "success";
        }
    }
    

    接下来分别启动这两个工程,注意将服务提供者的端口号(原来为1111改为1112)修改后再启动一次.就整个项目而言,总共有三个微服务再运行着(一个注册中心,两个服务提供者)。PS:其实服务提供者你想弄多少都行。

    创建服务消费者

    像一个普通的 spring cloud 工程一样,创建后向注册中心注册自己的信息。
    添加依赖:

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-ribbon</artifactId>
            </dependency>
    

     添加消费调用接口:
    这里涉及到一个类LoadBalancerClient,这个就是由 Netflix Ribbon 提供的工具类。他会根据 ServiceId (配置文件中的Service Name)向 Eureka (注册服务器)获取服务地址。

    @RestController
    public class ConsumerController {
    
        @Autowired
        private LoadBalancerClient client;
    
        @RequestMapping("/test")
        public String test(){
            ServiceInstance instance = client.choose("service");
            URI uri = instance.getUri();
            System.out.println(uri);
            return (new RestTemplate()).getForObject(uri+"/service",String.class);
        }
    }
    

     配置文件信息:

    # eureka client 配置
    spring.application.name=ribbon-consumer
    server.port=2222
    eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
    

    注意:LoadBalancerClient返回的是已经注册的服务器地址。

    启动服务消费者

    启动工程后,我们可以看到如下注册信息:

    这里写图片描述

    Ribbon 实现负载均衡

    多次访问 http://localhost:2222/test ,并查看控制台信息:
    这里写图片描述

    这样子,就实现了客户端的负载均衡了~

  • 相关阅读:
    前端之页面标签的图标修改
    分页, 解析器, 渲染器
    DRF的认证,频率,权限
    视图组件,路由组件,版本控制
    序列化组件
    Restful规范
    docker大全集
    哨兵和docker容器
    项目发布须知
    Linux之nginx
  • 原文地址:https://www.cnblogs.com/MaxElephant/p/8109142.html
Copyright © 2020-2023  润新知