SpringCloud|SpringCloud 客户端Ribbon负载均衡的实现方法

目录

  • Ribbon 介绍
  • 开启客户端负载均衡,简化 RestTemplate 调用
  • 负载均衡策略
  • 饥饿加载

Ribbon 介绍 Ribbon 是 Netflix 提供的一个基于 Http 和 TCP 的客户端负载均衡工具,且已集成在 Eureka 依赖中。
SpringCloud|SpringCloud 客户端Ribbon负载均衡的实现方法
文章图片

实现原理:SpringCloud Ribbon 的底层采用了一个拦截器,拦截了 RestTemplate 发出的请求,对地址做了修改。
SpringCloud|SpringCloud 客户端Ribbon负载均衡的实现方法
文章图片


开启客户端负载均衡,简化 RestTemplate 调用 1)在服务调用者的 RestTemplate 配置类上添加注解:
@Configurationpublic class RestTemplateConfig {@Bean@LoadBalanced// 开启客户端负载均衡(默认轮询策略)public RestTemplate restTemplate(){return new RestTemplate(); }}

2)在调用时指定服务名:
package com.controller; import com.domain.Goods; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; /** * 服务调用方 */@RestController@RequestMapping("/order")public class OrderController {@Autowiredprivate RestTemplate restTemplate; @GetMapping("/goods/{id}")public Goods findOrderByGoodsId(@PathVariable("id") int id) {String url = String.format("http://eureka-provider/goods/findOne/%d", id); Goods goods = restTemplate.getForObject(url, Goods.class); return goods; }}


负载均衡策略 负载均衡策略:
  • 轮询(默认)
  • 随机
  • 最小并发
  • 过滤
  • 响应时间
  • 轮询重试
  • 性能可用性
使用负载均衡:
方式一:使用 bean 的方式
  • 在消费者端配置负载均衡策略 Bean:
package com.config; import com.netflix.loadbalancer.IRule; import com.netflix.loadbalancer.RandomRule; import org.springframework.context.annotation.Bean; public class MyRule {@Beanpublic IRule rule() {return new RandomRule(); // 随机策略}}

  • 在启动类添加注解:
package com; import com.config.MyRule; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; @EnableDiscoveryClient// 激活DiscoveryClient@EnableEurekaClient@SpringBootApplication@RibbonClient(name="eureka-provider", configuration= MyRule.class)// 指定服务提供方并配置负载均衡策略public class ConsumerApp {public static void main(String[] args) {SpringApplication.run(ConsumerApp.class, args); }}

方式二:使用配置文件
server:port: 9000eureka:instance:hostname: localhostclient:service-url:defaultZone:http://localhost:8761/eurekaspring:application:name: eureka-consumer# 设置 Ribbon 的负载均衡策略:随机策略EUREKA-PROVIDER:ribbon:NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule.RandomRule

【SpringCloud|SpringCloud 客户端Ribbon负载均衡的实现方法】
饥饿加载 Ribbon 默认是采用懒加载,即第一次访问时才会去创建 LoadBalanceClient,请求时间会很长。而饥饿加载则会在项目启动时创建,达到降低第一次访问的耗时。
可以通过下面配置开启饥饿加载:
ribbon:eager-load:enabled: trueclients: userservice

到此这篇关于SpringCloud 客户端Ribbon负载均衡的实现方法的文章就介绍到这了,更多相关SpringCloudRibbon负载均衡内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读