Spring Cloud-05使用配置文件自定义Ribbon Client

版权声明:【show me the code ,change the world】 https://blog.csdn.net/yangshangwei/article/details/84930016

概述

Finchley.SR2版本的官方文档:
https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html#spring-cloud-ribbon

在这里插入图片描述


示例

新建子模块

父模块microservice-spring-cloud,右键新建Maven Module : micorservice-consumer-movie-ribbon-customrule-properties

查看父模块的pom.xml
在这里插入图片描述

子模块工程结构
在这里插入图片描述


子模块加入依赖

micorservice-consumer-movie-ribbon-customrule-properties子模块的pom.xml加入spring-cloud-starter-netflix-eureka-client依赖

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
	</dependency>

配置文件增加配置

根据官网的指导可知,如果我们希望在该微服务中设置请求某个服务的规则,配置

在这里插入图片描述

application.yml中增加如下配置

#使用属性自定义Ribbon配置
MICROSERVICE-PROVIDER-USER: 
  ribbon: 
    NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

这里我们使用随机的方式,所以设置了 RandomRule 。


验证

Step1:启动Eureka Server微服务
Step2: 启动两个Provider微服务
Step3:启动该微服务作为消费者,通过Eureka Server上的地址去调用注册在Eureka上的两个provider微服务,观察负载均衡策略

在这里插入图片描述

经过测试,如果设置了NIWSServerListClassName,那么调用的服务端的微服务的名字必须大写,否则会找不到微服务。 No instances available for microservice-provider-user。 不过看官网的例子服务名也是小写的,这里还不是很清楚,请大家慎重看待我这里的结论,不一定正确,欢迎指正

这样设置,测试了下结果还是像轮询的方式,先把 NIWSServerListClassName: com.netflix.loadbalancer.ConfigurationBasedServerList配置项去掉,重新验证下

在去掉NIWSServerListClassName的前提下

  • 如果服务名还是大写的话,看测试结果 还是轮询的。

在这里插入图片描述

  • 如果把服务名改成小写,测试结果

在这里插入图片描述

看结果,是随机分发的策略。

目前还搞不懂Spring Cloud 和Ribbon 是如何协调工作的,先记录下结果,后续再研究。 如果有不对的地方,请指正,谢谢。

Spring Boot和Spring Cloud 的版本信息

在这里插入图片描述


源码

https://github.com/yangshangwei/SpringCloudMaster

猜你喜欢

转载自blog.csdn.net/yangshangwei/article/details/84930016
今日推荐