目录
概念简介
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是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则 (如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算 法。
用于获取地址列表。它既可以是静态的(提供一组固定的地址),也可以是动态的(从注册中心中定期查询地址列表)。
仅当使用动态ServerList时使用,用于在原始的服务列表中使用一定策略过虑掉一部分地址。
选择一个最终的服务地址作为LB结果。选择策略有轮询、根据响应时间加权、断路器(当
Hystrix可用时)等。
在工作时首选会通过ServerList来获取所有可用的服务列表,然后通过ServerListFilter过虑掉一部分地址,最后在剩下的地址中通过IRule选择出一台服务器作为最终结果。
以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务 器。
随机选择状态为UP的Server
根据相应时间分配一个weight,相应时间越长,weight越小,被选中的可能性越低。区域感知轮询负载均衡(ZoneAvoidanceRule复合判断server所在区域的性能和server的可用性选择server。
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。
使用Feign,只需要创建一个接口并注解,它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解,Feign支持可插拔的编码器和解码器,Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。
Feign 具有如下特性:
简而言之:Feign能干Ribbon和Hystrix的事情,但是要用Ribbon和Hystrix自带的注解必须要引入相应的jar包才可以。
。。
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-openfeign
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和端口
对应Feignclient里面的阐述对应client的application服务名称:
spring-cloud-server
spring-cloud-eureka-client
spring-cloud-consumer
至于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();//最大可用策略,即先过滤出故障服务器后,选择一个当
前并发请求数最小的
}
}