Ribbon 和 Nginx 负载均衡的区别
Ribbon是本地负载均衡,再调用微服务接口时,会从服务注册中心拉取服务列表缓存到本地JVM,从而实现本地RPC远程调用。这种叫做进程内LB(LB的含义是负载均衡英文缩写)
Nginx是服务器负载均衡,所有的请求都交给Nginx,由Nginx实现转发请求,实现负载均衡调用。这种叫做集中式LB
restTemplate的getForObject和getForEntity的区别
getForEntity方法返回的值比getForObject方法返回值除了返回数据还有请求信息例如返回状态,请求头等信息。
Ribbon负载规则替换
- 注意自己配置的负载规则不能被项目的@ComponentScan标签扫描到,否则会造成配置被全部的Ribbon共享,不能实现个性化配置
- 添加负载规则配置文件
@Configuration
public class MySelfRule
{
@Bean
public IRule myRule()
{
// 默认规则为轮询,可以配置随机 重试 权重 并发量 等实现规则 都是实现 IRule接口
return new RandomRule();//定义为随机
}
}
- 启动类上配置上负载规则
@SpringBootApplication
@EnableEurekaClient
@RibbonClient(name = "CLOUD-PAYMENT-SERVICE",configuration=MySelfRule.class)
public class OrderMain80
{
public static void main(String[] args) {
SpringApplication.run(OrderMain80.class, args);
}
}
负载均衡算法
轮询的算法: rest第几次请求%对于服务集群的总个数=实际调用服务的下标,每次重启集群中的服务从1开始算。