SpringCloud客户端负载均衡:Ribbon

博客 分享
0 219
优雅殿下
优雅殿下 2022-06-04 21:00:05
悬赏:0 积分 收藏

SpringCloud 客户端负载均衡:Ribbon

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


Ribbon 介绍

Ribbon 是 Netflix 提供的一个基于 Http 和 TCP 的客户端负载均衡工具,且已集成在 Eureka 依赖中。

image

1)客户端负载均衡:

  • image

  • 负载均衡算法在客户端

  • 客户端维护服务地址列表

2)服务端负载均衡:

  • image
  • 负载均衡算法在服务端
  • 由负载均衡器维护服务地址列表

开启客户端负载均衡,简化 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 {    @Autowired    private 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 {    @Bean    public 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: localhost  client:    service-url:      defaultZone:  http://localhost:8761/eurekaspring:  application:    name: eureka-consumer# 设置 Ribbon 的负载均衡策略:随机策略EUREKA-PROVIDER:  ribbon:    NFloadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule.RandomRule
posted @ 2022-06-04 20:49 Juno3550 阅读(0) 评论(0) 编辑 收藏 举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2018 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员