ribbon使用(不使用服务发现、feign、restTemplate)

ribbon使用

学习中笔记


一、ribbon使用(不使用服务发现)

1、引入依赖

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

2、使用@RibbonClient配置功能区客户端

如果使用服务发现的功能,一般不去使用此方法开启ribbon,除非在没有使用服务发现的情况下或者需要为特定的功能区客户端自定义功能区设置

  • 定义一个ribbonclient
    在这里插入图片描述

    Name:为特定name的ribbon client自定义配置。
    Configuration:指定Ribbon的配置类

  • 配置文件中定义
    name对应配置文件中指定的客户端名称
    ${clientName}.ribbon.ConnectTimeout=500

mxm-user:
  ribbon:
    listOfServers: localhost:8110,localhost:8111,localhost:8112
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    MaxAutoRetries: 1
    # 最多重试多少台服务器,Max number of next servers to retry (excluding the first server)
    MaxAutoRetriesNextServer: 3
    # 无论是请求超时或者socket read timeout都进行重试,Whether all operations can be retried for this client
    OkToRetryOnAllOperations: true
    # Interval to refresh the server list from the source
    ServerListRefreshInterval: 2000
    # 请求连接的超时时间
    ConnectTimeout: 5000
    # 请求处理的超时时间
    ReadTimeout: 5000
  • restTemplate调用
    在这里插入图片描述

二、ribbon使用(restTemplate)

  • 引入依赖继承了Nacos后不需要添加任何依赖,已经内置了
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
  • 开启ribbon
    启动类加上@EnableDiscoveryClient 注解,并初始化restTemplate,在restTemplate加上@LoadBalanced注解表明这个restRemplate开启负载均衡的功能。开启ribbon
    在这里插入图片描述
    @LoadBalanced注解用作标记注释,指示被注释的对象RestTemplate应使用LoadBalancerClient与服务进行交互。

三、ribbon使用(feign)

  • 引入依赖。 由于spring-cloud-starter-openfeign中默认已经引入了ribbon。即使不做额外的配置ribon也已经在使用
    在这里插入图片描述
  • 以上完成配置,创建三个mxm-user实例使用demo-test进行ribbon的测试。因为ribbonclient的定义和feign的定义字段相同,进行共用。在创建name为mxm-user的feignclient的时候也创建了ribbonclient

五、自定义ribbon客户端配置

配置文件的优先级 > java代码的配置方式 > netflix自定义的配置方式

  • 配置文件方式
配置项说明
《clientName》.ribbon.NFLoadBalancerClassName指定ILoadBalancer的实现类
《clientName》.ribbon.NFLoadBalancerRuleClassName指定IRule的实现类
《clientName》.ribbon.NFLoadBalancerPingClassName指定IPing的实现类
《clinetName》.ribbon.NIWSServerListClassName指定ServerList的实现类
《clientName》.ribbon.NIWSServerListFilterClassName指定ServerListFilter的实现类
  • java代码方式
BeanbeanTyp作用默认值
IClientConfigribbonClientConfig读取配置默认采用 DefaultClientConfigImpl 实现。
IRuleribbonRule负载均衡策略默认采用ZoneAvoidanceRule 实现,该策略能够在多区域环境下选择最佳区域的实例进行访问
IPingribbonPing实例检查策略筛选掉ping不同的实例默认采用NoOpPing 实现,该检查策略是一个特殊的实现,实际上他并不会检
ServerListribbonServerList服务实例清单的维护机制默认采用 ConfigurationBasedServerList 实现。
ServerListFilterribbonServerListFilter服务实例清单过滤机制默认采用 ZonePreferenceServerListFilter 实现,该策略能够优先过滤出与请求调用方处理同区域的服务实现
ILoadBalancerribbonLoadBalancer负载均衡器默认采用ZoneAwareLoadBalancer 实现,他具备了区域感知的能力
ServerListUpdaterribbonServerListUpdater更新交给ribbon list的策略默认采用PollingserverListUpdater,动态更新它通过定时任务的方式进行服务列表的更新。

六、ribbon属性配置

a)全局配置

  • 每台服务器最多重试次数,但是首次调用不包括在内,
    ribbon.MaxAutoRetries=1
  • 最多重试多少台服务器
    ribbon.MaxAutoRetriesNextServer=1
  • 无论是请求超时或者socket read timeout都进行重试
    ribbon.OkToRetryOnAllOperations=true
  • 服务列表刷新间隔时间
    ribbon.ServerListRefreshInterval=2000
  • 请求连接的超时时间
    ribbon.ConnectTimeout=3000
  • 请求处理的超时时间
    ribbon.ReadTimeout=3000

b)指定客户端配置
${clientName}.ribbon.ConnectTimeout=500
关于重试机制Ribbon的超时与Sentinel的超时是两个概念。通常须要让Sentinel的超时时间大于Ribbon的超时时间,不然Sentinel命令超时后,直接熔断,重试机制就没有任何意义了

七、ribbon懒加载

  • Ribbon默认是懒加载,只有在代码调用的时候才回去创建ribbon client,这样会导致首次调用较慢在这里插入图片描述
  • 解决:
ribbon:
  eager-load:
    enabled: true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值