使用spring-cloud-starter-netflix-eureka-client依赖实现
负载均衡策略
最近在学习SpringCloud负载均衡的时候遇到了一点麻烦,网上的视频、博客基本都是使用spring-cloud-starter-netflix-ribbon
这个依赖实现的(但springcloud在2020.0.0之后,移除掉了netflix-ribbon 使用eureka-client中的loadbalancer,使用自定义负载均衡不使用IRule接口,所以就遇到了很多问题),但这里也会复盘一下传统的实现!之后再讲新方法的实现,当然,也可以直接跳到二、使用LoadBalancer实现
直接阅读新方法的使用
注意这里需要电脑上已经跑起了注册中心、服务提供者,能有多个最好:
像这种主机上跑多个服务的就要在修改电脑的host文件了,也很简单,就是做一个简单地映射:
启动注册中心与需求提供者,浏览器访问:http://eureka7001.com:7001/
可以看到三个需求提供者已经注册进去了,实例名称都是一样的,关联的其他集群也都配置正常!
此时启动80端口,访问http://localhost/consumer/list,可以看到查出了结果:
这里就可以自定义负载均衡的策略了,让不同情况、不同时间下访问服务端使用不同的需求提供者,多访问几次后时这种效果,默认的是轮询访问:
下面就来介绍如何使用及自定义负载均衡策略
以下都只介绍80接口的客户端的那一个模块中的自定义负载均衡模块的实现
一、使用IRule接口实现
1.导入Maven依赖
<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>
2.yml配置
server:
port: 80
# Eureka配置
eureka:
client:
register-with-eureka: false #不向eureka中注册自己,默认为true,false表示不注册(由提供者去注册)
service-url:
defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/,http://eureka7003.com:7003/eureka/
fetch-registry: true #表示是否从Eureka Server获取注册的服务信息,默认为true,false表示不获取
3.使用springcloud配置的负载均衡算法
默认的配置一共有7种,如果我们不指定,那默认的就是轮询算法,就是需求提供者轮个上
比如我们可以直接在任意的配置类中引入以下代码使随机访问需求提供者生效均衡策略生效:
@Bean
public IRule myRule(){
return new RandomRule();
}
此时在多次访问http://localhost/consumer/list时就能看到每次访问到的数据都是随机出现的,说明这