spring cloud——Ribbon的学习笔记以及入门案例

Posted *^O^*—*^O^*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring cloud——Ribbon的学习笔记以及入门案例相关的知识,希望对你有一定的参考价值。

什么是Ribbon

Ribbon是一个基于HTTP和TCP的客服端 负载均衡工具,它是基于Netflix Ribbon实现的,它几乎存在每一个Spring Cloud微服务之中,包括Feign提供的声明式服务调用也是基于Ribbon实现的
其默认提供很多负载均衡算法,例如轮询,随机等等,还可以自定义

负载均衡不同方案的区别

集中式负载均衡(服务器负载均衡),即在consumer和provider之间使用独立的负载均衡设施,由该设施负责把访问请求通过某种策略转发至provider

进程内负载均衡(客户端负载均衡)将负载均衡集成到consumer,consumer从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的provider,Ribbon就属于这种,它是一个类库,集成于consumer进程

Ribbon负载均衡策略

轮询(默认) RoundRobinRule

权重轮询策略 WeightedResponseTimeRule
根据每个Provider的响应时间开始分配一个权重,响应时间越长,权重越小,被选中的可能性就越小

随即策略 RandomRule

最少并发数策略 BestAvailableRule,选择最闲的那个

重试策略 RetryRule,轮询查到不可用时,会重新尝试

可用性敏感策略 AvailabilityFilteringRule,过滤掉性能差的provider

区域敏感性策略 ZoneAvoidanceRule
以一个区域为单位考察可用性,对于不可用的区域整个丢弃,从剩下区域中选可用的provider

Ribbon入门案例与Ribbon负载均衡策略设置

首先创建两个具有相同服务名称的服务provider,这里我因为是在同一台机子上,所以用端口号进行区分

server:
  port: 7071
spring:
  application:
    name: service-provider

  freemarker:
    prefer-file-system-access: false

eureka:
  instance:
    prefer-ip-address: true
    instance-id: $spring.cloud.client,ip-address:$server.port
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
server:
  port: 7070
spring:
  application:
    name: service-provider

  freemarker:
    prefer-file-system-access: false

eureka:
  instance:
    prefer-ip-address: true
    instance-id: $spring.cloud.client,ip-address:$server.port
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

全局的配置,都是同过上面的类名直接注入,或者进行配置,这里注意是在服务的调用者 consumer中设置

package com.service_consumer.config

import com.netflix.loadbalancer.RandomRule
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration

@Configuration
class RibbonConfig 

    @Bean
    fun randomRule():RandomRule
        return RandomRule()
    

局部的配置

service-provider: #服务的名称
  ribbon:
    NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule


在访问的时候就可以看见是随机的,我对于两个服务的返回字符串不同

Ribbon点对点直连

点对点直连是指绕过注册中心,直接连接服务提供者获取服务,一般再测试阶段使用比较多
需要去除Eureka的依赖,引入Ribbon依赖

// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-ribbon
implementation("org.springframework.cloud:spring-cloud-starter-netflix-ribbon:2.2.10.RELEASE")

以上是关于spring cloud——Ribbon的学习笔记以及入门案例的主要内容,如果未能解决你的问题,请参考以下文章

笔记:Spring Cloud Feign Ribbon 配置

SpringCloud学习笔记3:Spring Cloud Netflix 组件(五大神兽)

笔记:Spring Cloud Ribbon 客户端配置详解

笔记:Spring Cloud Ribbon RestTemplate 详解

笔记:Spring Cloud Ribbon 客户端负载均衡

总结学习Spring Cloud系列之深入理解Ribbon