天天看点

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

目录

概念简介

Ribbon简介 

Ribbon的核心组件均为接口类型,有以下几个 

ServerList 

ServerListFilter 

IRule 

Ribbon

Ribbon提供的主要负载均衡策略介绍 

简单轮询负载均衡(RoundRobin) 

随机负载均衡 (Random) 

加权响应时间负载均衡 (WeightedResponseTime) 

Feign简介

Fegin实现负载均衡

创建SpringCloud-consumer项目

添加依赖

编写application配置文件

启动类开启Feign

创建Feign客户端接口

依次启动项目:

查看注册中心

访问服务

consumer里面的注入方法源自注入类

将要负载均衡部署的服务,命名同一个名称application name

测试默认轮询策略

创建负载均衡配置类

修改为随机

概念简介

概要源头:https://www.w3cschool.cn/spring_cloud/

Ribbon简介 

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则 (如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算 法。

Ribbon的核心组件均为接口类型,有以下几个 

ServerList 

用于获取地址列表。它既可以是静态的(提供一组固定的地址),也可以是动态的(从注册中心中定期查询地址列表)。

ServerListFilter 

仅当使用动态ServerList时使用,用于在原始的服务列表中使用一定策略过虑掉一部分地址。

IRule 

选择一个最终的服务地址作为LB结果。选择策略有轮询、根据响应时间加权、断路器(当

Hystrix可用时)等。

Ribbon

在工作时首选会通过ServerList来获取所有可用的服务列表,然后通过ServerListFilter过虑掉一部分地址,最后在剩下的地址中通过IRule选择出一台服务器作为最终结果。

Ribbon提供的主要负载均衡策略介绍 

简单轮询负载均衡(RoundRobin) 

以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务 器。

随机负载均衡 (Random) 

随机选择状态为UP的Server

加权响应时间负载均衡 (WeightedResponseTime) 

根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。区域感知轮询负载均衡(ZoneAvoidanceRule复合判断server所在区域的性能和server的可用性选择server。

Feign简介

Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。

使用Feign,只需要创建一个接口并注解,它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解,Feign支持可插拔的编码器和解码器,Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。

Feign 具有如下特性:

  • 可插拔的注解支持,包括Feign注解和JAX-RS注解
  • 支持可插拔的HTTP编码器和解码器
  • 支持Hystrix和它的Fallback
  • 支持Ribbon的负载均衡
  • 支持HTTP请求和响应的压缩Feign是一个声明式的Web Service客户端,它的目的就是让Web Service调用更加简单。它整合了Ribbon和Hystrix,从而不再需要显式地使用这两个组件。Feign还提供了HTTP请求的模板,通过编写简单的接口和注解,就可以定义好HTTP请求的参数、格式、地址等信息。接下来,Feign会完全代理HTTP的请求,我们只需要像调用方法一样调用它就可以完成服务请求。

简而言之:Feign能干Ribbon和Hystrix的事情,但是要用Ribbon和Hystrix自带的注解必须要引入相应的jar包才可以。

Fegin实现负载均衡

创建SpringCloud-consumer项目

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

。。

添加依赖

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡
<!--Eureka客户端配置 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>

</dependency>

<!--引入Feign支持 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-openfeign</artifactId>

</dependency>

           

编写application配置文件

server:

  port: 8083

  servlet:

    context-path: /



spring:

  application:

    name: ChangBiRenYuan-consumer

    

eureka:

  client:

    service-url:

      #向服务端注册

      defaultZone: http://localhost:8081/eureka/    #链接注册中心集群

  instance:

    instance-id: consumer-8083  #定义微服务的名称

    #4、创建服务启动类

    prefer-ip-address: true #是否显示IP和端口
           
SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

启动类开启Feign

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

创建Feign客户端接口

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

对应Feignclient里面的阐述对应client的application服务名称:

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

依次启动项目:

spring-cloud-server

spring-cloud-eureka-client

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

spring-cloud-consumer

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

查看注册中心

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

访问服务

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

consumer里面的注入方法源自注入类

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

将要负载均衡部署的服务,命名同一个名称application name

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

测试默认轮询策略

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡
SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

至于rest和Ribbon方式,大体一致,多个设置IP和配置类。

创建负载均衡配置类

@Configuration

public class RestTemplateConfig {

@Bean

@LoadBalanced

public RestTemplate getRestTemplate() {

return new RestTemplate();

}

@Bean

public RoundRobinRule myRule() {

return new RoundRobinRule();//轮询策略

// return new RandomRule();//随机策略

// return new AvailabilityFilteringRule();//首先会过滤掉故障机或者并发链

接数超过阈值的服务器.剩余的机器轮询配置

// new WeightedResponseTimeRule();//服务器影响时间越快,则权重越高

// new BestAvailableRule();//最大可用策略,即先过滤出故障服务器后,选择一个当

前并发请求数最小的

}

}

修改为随机

SpringCloud微服务(二)Fegin负载均衡概念简介Fegin实现负载均衡

继续阅读