四:SpringCloud-Ribbon、Feign 负载均衡

1.Ribbon含义

  • Sping cloud Ribbon是基于Netfix实现的一套客户端负载均衡工具
  • Ribbon是NetFix发布的一套开源项目,主要功能提供给客户端软件负载均衡方法,将Netfix的中间层服务连接在一起,Ribbon的客户端提供一系列完整的配置项:连接超时,重试等,简单地说,就是在配置文件中列出LoadBalance(负载均衡,LB),Ribbon会基于某种规则帮你连接服务器。
  • 负载均衡就是将用户请求平摊分配到多个服务器,从而达到HA(高可用)
  • 常见的负载均衡软件:Ngix
  • Dubbo,SpringCloud都提供了负载均衡,SpringCloud提供的负载均衡可以自定义。
  • 负载均衡简单分类:集中式:在服务的消费方和提供方提供独立的负载均衡设施,如Ngix反向代理,由该设施负责把访问的请求通过某种策略转发至服务的提供方。
  • 负载均衡简单分类:进程式:将负载均衡逻辑集中到消费方,消费方从服务注册中心获知有哪些地址可用,然后再从地址中选一个合适的服务器,例如:Ribbon,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务方的地址

2.导入依赖包 、 编写配置、开启注解
因为时发生在客户端,所以应该在服务消费方中编写,导入ribbon和Eurek客户端

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-ribbon</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
eureka:
  client:
    register-with-eureka: false
    service-url:
      defaultZone: http://eureka7002.com:7002/eureka/,http://eureka7001.com:7001/eureka/

在这里插入图片描述

3.配置负载均衡实现template

地址应该是一个变量,修改成通过服务名来随机访问服务器:
在这里插入图片描述

Ribbon和Eureka整合以后客户端可以直接调用不用关心IP地址和端口号。

4.实现集群负载均衡
在这里插入图片描述
3.1配置多个服务提供者
在这里插入图片描述
将服务注册到Eureka中:
在这里插入图片描述

3.2启动eureka,多个服务提供者 ,消费者进行测试,
测试结果:轮询访问三个服务提供者。

5.自定义负载均衡算法
负载均衡算法实现了IRule接口,有以下几个负载均衡算法:

  1. RoundRobinRule:轮询
  2. RandomRule:随机
  3. AvailibityFilteringRule:会先过滤掉跳闸 访问故障的服务,对剩下的服务进行轮询。
  4. RetryRule:会先进行轮询,如果获取指定服务失败,会在一定时间内重新尝试获取。

自定义Ribbon客户端
5.1 添加注解,配置自己的算法类
name=“服务名”,configuration=“自定义算法的类”
在这里插入图片描述

注意:自定义的算法类不应该与启动类在同一个目录下,否则会被componentScan扫描到,请放在一个单独的,不重叠的包。
在这里插入图片描述

Feign–负载均衡

简介
feign是声明式的web service客户端,只需要创建一个接口,添加一个注解即可,feign主要是面向社区,调用微服务的两种方法

  • 微服务名字:ribbon
  • 接口和注解:feign

feign旨在使编写Http客户端变得更容易,在feign的实现下,只需创建一个接口,添加一个注解,类似(dao接口上标注Mapper注解,现在是一个微服务接口标注一个feign注解),即可完成服务提供方的接口的绑定,

1.添加feign依赖

  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-feign</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>

2.新建service

@Component
@FeignClient(value = "SPRINGCLOUD-PROVIDER")
public interface DeptClientService {
    @GetMapping("/dept/get/{id}")
    public Dept queryById(@PathVariable("id") Long id);

    @GetMapping("/dept/getAll")
    public List<Dept> queryAll();

    @PostMapping("/dept/add")
    public boolean addDept(Dept dept);
}

3.远程调用

@RestController
public class DeptConsumerController {
    @Autowired
    private DeptClientService deptClientService;

    @GetMapping("/dept/get/{id}")
    public Dept queryById(@PathVariable("id") Long id){
        return deptClientService.queryById(id);
    }

    @GetMapping("/dept/getAll")
    public List<Dept> queryAll(){
        return deptClientService.queryAll();
    }

    @PostMapping("/dept/add")
    public boolean addDept(Dept dept){
        return deptClientService.addDept(dept);
    }
}

2.开启注解
在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值