0403-Ribbon的基本使用

Posted 木子旭

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0403-Ribbon的基本使用相关的知识,希望对你有一定的参考价值。

一、概述

  问题1、上一篇文章已说明如何注册微服务,但是调用方如何调用,以及如何防止硬编码。即电影微服务调用用户微服务

  问题2、用户微服务多个节点,调用服务方如何负载均衡

二、实现负载均衡方式

2.1、服务器端负载均衡

  

2.2、客户端负载均衡

  

三、Ribbon

3.1、Ribbon是什么

  Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端侧负载均衡算法。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,Ribbon是一个客户端负载均衡器,我们可以在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器,我们也很容易使用Ribbon实现自定义的负载均衡算法。

下图展示了Eureka使用Ribbon时候的大致架构:

   

  Ribbon工作时分为两步:第一步先选择 Eureka Server, 它优先选择在同一个Zone且负载较少的Server;第二步再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址。其中Ribbon提供了多种策略,例如轮询round robin、随机Random、根据响应时间加权等。

四、官方文档解读

官方地址:https://cloud.spring.io/spring-cloud-static/Edgware.SR3/single/spring-cloud.html#spring-cloud-ribbon

4.1、引入pom

查看erueka已经有ribbon依赖,此处可以忽略。

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

4.2、使用

将RestTemplate具有Ribbon的负载均衡能力,增加@LoadBalanced注解

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

4.3、修改项目

注意需要先把两个权限注释或者配置一下按照项目中

management:
  port: 11111   #actuator暴露接口使用的端口,为了和api接口使用的端口进行分离
  context-path: /admin   #actuator暴露接口的前缀
  security:
    enabled: true   #actuator是否需要安全保证
    roles: SUPERUSER
security:
  basic:
    enabled: true
    path: /admin    #针对/admin路径进行认证
  user:
    name: admin
    password: password

将movie服务请求修改为

    @GetMapping("/movie/{id}")
    public User findById(@PathVariable Long id) {
        //http://127.0.0.1:7900/sample/
        //VIP visual IP 
        // HAProxy Heartbeat 软件都有提及VIP
        return restTemplate.getForObject("http://microservice-provider-user/sample/" + id, User.class);
    }

调用服务即可。

4.4、修改用户服务端口为7901,在启动一个服务,此时已经有两个微服务提供方

使用Run Configurations或者Debug Configurations配置即可。

4.5、此时负载均衡已经生效。【开始可能没有生效,客户端服务列表没有】默认使用轮询

查看代码:https://github.com/bjlhx15/spring-cloud

microservice-comsumer-movie-ribbon

microservice-discovery-eureka

microservice-provider-user

 

以上是关于0403-Ribbon的基本使用的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp Robolution基本代码片段

如何从片段外部清除/重置地图?

JavaScript 代码片段

Android 使用两个不同的代码片段获取当前位置 NULL

(转) Java中的负数及基本类型的转型详解

片段内带有基本适配器的列表视图