前言
上一小节我们学习了如何在SpringCloud微服务架构中通过配置的方式来实现自定义ribbon均衡负载策略。本小节我们来学习一下如何在微服务架构下使某个服务节点失去Eureka的Ribbon均衡负载。
首先说明一下在微服务架构下使某个服务节点失去Eureka的Ribbon均衡负载这个技术实现对某些特定的业务逻辑的实现是有非常大的帮助的。首先我们知道Eureka是自带Ribbon的均衡负载策略的,既然都自带了均衡负载策略为什么我们还要是某个节点失去Eureka的Ribbon均衡负载呢,人家为你做了这么周全的设计来保证你的业务正常进行你为什么不采纳非要自己去搞一些什么特殊情况呢?
其实不然,在生产环境下面使用Eureka自带的Ribbon均衡负载策略固然是好的,毕竟人家做这样的设计是经过实际考验的,但在实现我们自己特定的业务逻辑的时候我们需要一些特殊处理,此时之前做的周全设计就显得比较碍手碍脚了,于是乎需要自己跳出来来自己实现特定的均衡负载策略。
本小节将展示两个业务场景与案例,案例(一)用来说明如何使某个服务节点失去Eureka的Ribbon均衡负载,案例(二)用来说明某个节点脱离了Eureka的Ribbon均衡负载之后如何自定义自己的均衡负载策略。
案例(一)
本案例用来实现和说明如何在微服务架构下使某个服务节点失去Eureka的Ribbon均衡负载。
-
Eureka Server端编写:((参考前例))。
-
Eureka Client端服务提消费编写(多实例) 在多个端口启动多个实例 (参考前例)
开启3个实例(8081、8083、8084)。
-
Eureka Client端服务提供方编写(参考前例)
-
项目结构
-
CoreCode
@SpringBootApplication @EnableDiscoveryClient public class MicroserviceDealBrokerRibbonCustomizedApplication { @Bean @LoadBalanced /** * 添加 @LoadBalanced 使该RestTemplate具备Ribbon均衡负载算法功能 * @return */ public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(MicroserviceDealBrokerRibbonCustomizedApplication.class, args); } }
server: port: 8082 spring: application: name: microservice-deal-broker-cloud-ribbon-without-eureka eureka: client: serviceUrl: defaultZone: http://localhost:8080/eureka/ instance: prefer-ip-address: true ribbon: #使该服务消费节点失去Eureka的Ribbon均衡负载在策略能力 eureka: enabled: false microservice-deal-cloud: #脱离Eureka的Ribbon均衡负载之后继续声明使用Ribbon的均衡负载策略(默认为轮询策略。) ribbon: listOfServers: localhost:8081,localhost:8084 #声明Ribbon均衡负载策略只对microservice-deal-cloud服务节点中的8081和8084端口上的实例实现均衡负载策略。(此时8083未做申明,Ribbon将不对8083上的实例做均衡负载策略算法的实现即不访问8083上的实例。) #listOfServers: localhost:8081,localhost:8084
-
-
持续访问:http://localhost:8082/deal/2
Ribbon会使用轮询策略定位8081和8084端口上的实例。扫描二维码关注公众号,回复: 3999502 查看本文章
案例(二)
本案例用来说明某个节点脱离了Eureka的Ribbon均衡负载之后如何自定义自己的均衡负载策略。正如我们之前反复提到的一点:Ribbon默认使用的均衡负载策略是轮询策略。且本案例的实现是在本节案例(一)基础是上的。
-
Eureka Server端编写:((参考前例))
-
Eureka Client端服务提消费编写(多实例) 在多个端口启动多个实例 (参考案例(一中的Eureka Client端服务提消费编写))开启3个实例(8081、8083、8084)
-
Eureka Client端服务提供方编写(参考前例)
-
项目结构
-
CoreCode
@SpringBootApplication @EnableDiscoveryClient public class MicroserviceDealBrokerRibbonCustomizedApplication { @Bean @LoadBalanced /** * 添加 @LoadBalanced 使该RestTemplate具备Ribbon均衡负载算法功能 * @return */ public RestTemplate restTemplate() { return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(MicroserviceDealBrokerRibbonCustomizedApplication.class, args); } }
server: port: 8082 spring: application: name: microservice-deal-broker-cloud-ribbon-without-eureka eureka: client: serviceUrl: defaultZone: http://localhost:8080/eureka/ instance: prefer-ip-address: true ribbon: eureka: enabled: false microservice-deal-cloud: ribbon: listOfServers: localhost:8081,localhost:8084 NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #自定义Ribbon的负载均衡策略为随机策略。
-
-
持续访问:http://localhost:8082/deal/2
Ribbon会使用随机策略随机定位到不同的实例(仅在8081和8084两个实例中做随机策略实现):
小结
-
A服务节点要想脱离Eureka的Ribbon均衡负载策略功能需要在A服务节点的配置文件中做如下声明:
ribbon:eureka:enabled: false,同时声明A服务节点在脱离Eureka的Ribbon均衡负载策略功能之后Ribbon需要实现的均衡负载策略。以本节案例(一)为例,microservice-deal-broker-cloud-ribbon-without-eureka服务节点脱离Eureka的Ribbon均衡负载策略功能之后,后续还声明了Ribbon的均衡负载策略即对microservice-deal-cloud节点上的指定实例(8081和8084)实现Ribbon的均衡负载策略(若为对策略做声明默认使用Ribbon默认的均衡负载策略即轮询策略,即microservice-deal-cloud: ribbon:listOfServers: localhost:8081,localhost:8084配置说明。 -
在A服务节点脱离Eureka的Ribbon均衡负载策略功能之后,我们仍需要根据不同的业务场景来实现不同均衡负载策略,本节案例(二)就是在A服务节点脱离Eureka的Ribbon均衡负载策略功能之后,通过配置的方法实现Ribbon的均衡负载策略的自定义的实现。至于实现原理请参考:SpringCloud微服务 之Ribbon(三-Customize)
-
本节用到的案例:microservice-deal-eureka、microservice-deal-cloud(8081、8083、8084)、microservice-deal-broker-cloud-ribbon-without-eureka