SpringCloud负载均衡 Ribbon




1,怎么实现负载均衡
通过注解@LoadBalanced来实现负载均衡,如下面的代码:
SpringCloud负载均衡 Ribbon_第1张图片

2,色带的架构与原理
SpringCloud负载均衡 Ribbon_第2张图片

3,Ribbon的工作
分为两步:
1)第一步有限选择Eureka服务器,它优先选择同一个Zone并负载较少的服务器,
2)第二步在根据用户指定的策略,在从服务器取到的服务注册列表中选择一个地址。其中Ribbon提供了多重策略,例如轮询round robin,随机Random,根据相应时间加权等。

4,实例说明
4.1,下面,我将举个实例来说明色带的使用。
SpringCloud负载均衡 Ribbon_第3张图片

4.2,代码
这里只贴出关键的消费者的重要代码:
工程名称:microservice-consumer-provider-ribbon
应用程序类ConsumerMovieProviderApplication代码如下:
SpringCloud负载均衡 Ribbon_第4张图片

配置Ribbon策略类TestConfiguration,注意,这个类的位置不能再应用类的目录或其子目录下,这是需要强调的。
SpringCloud负载均衡 Ribbon_第5张图片

最后,我们来看我们的测试接口类MovieController,我们把所加载的微服务的实例名和端口给打印出来类代码如下:
SpringCloud负载均衡 Ribbon_第6张图片

我们的接口方法为test()方法,分别选择了加载上面已经在Eureka Server中所注册的User微服务,实例名分别为:microservice-provider-user 和 microservice-provider-user2 ,那么我们通过浏览器多测请求接口来查看能打印出什么。
我这里请求了接口5次,打印出的内容为:

   
   
   
   
  • 1
  • 2
  • 3

SpringCloud负载均衡 Ribbon_第7张图片

我们可以看到,调用的实例“微服务提供商用户”顺序为:7901,7901,7900,7900,7900,7901,7901,7900,所以这个按照我们配置的策略-RandomRule(随机策略)来随机分配用户提供者的。
好,接着看实例“微服务提供商,用户2”的调用顺序为:7902,7903,7902,7903,7903,7902,7902,7903,所以这个也是按照我们配置的随机策略来随机分配用户提供者的。

但是,我们上面的Ribbon策略类时放在非Application目录及其子目录下的,那如果我们要放在期目录或子目录下,那么办。这里我就放在与Application类同目录下。

1)首先,我们需要在Application同目录下增加一个注解类    ExcludeFromComponentScan,如下代码:

   
   
   
   
  • 1
  • 2
  • 3
  • 4
public @interface ExcludeFromComponentScan {

}
   
   
   
   
  • 1
  • 2
  • 3

这个类没有内容
。2)其次,我们需要在Application类上面增加注解@ComponentScan,如下所示:

SpringCloud负载均衡 Ribbon_第8张图片

说明一下,这里添加的这个注解是:排除掉有注解ExcludeFromComponentScan的策略类。

3)然后,我们还需要在策略类上添加这个注解,如下:
SpringCloud负载均衡 Ribbon_第9张图片

4)最后,我们启动这个服务,并在浏览器中调用接口,看看输出结果能否成功。
SpringCloud负载均衡 Ribbon_第10张图片

结果:实例“微服务提供商用户”调用顺序:7900,7901,7900,7901,7900,7901,7900,7901,很明显这不是随机策略,的采用轮询的英文策略
实例“微服务提供商,用户2 “调用顺序:7903,7903,7903,7902,7903,7902,7903,7903,很明显这是随机策略因为我们有配置排除策略的模式,在应用类上,我们注解了@RibbonClient,并且将策略TestConfiguration配置应用到了实例“微服务提供商,用户2”上。

5,Ribbon客户端配置文件配置
上面已经做了Java代码配置,现在我们来进行配置文件配置,首先先前上面Java配置的工程复制一个工程,然后删除策略类TestConfiguration,和注解类ExcludeFromComponentScan;同时将Application类的注解@RibbonClient和@ComponentScan去掉。完成这些之后,开始进行配置。
SpringCloud负载均衡 Ribbon_第11张图片

上面的英文是摘自官网API文档中的部分,“定制Ribbon Client”,其中有几个关键点,

   
   
   
   
  • 1
  • 2

1)您可以在.ribbon中配置... *
这里的意思就是说:你可以配置外部属性来配置Ribbon Client,在配置外部属性时应该使用.ribbon。*的格式来配置,这里的其实就是上面Java配置中对应的实例名,如:微服务提供商用户。

好,下面来进行配置,配置文件application.yml
这里写图片描述

配置完成之后,就可以启动Appcliation,然后再到浏览器中访问,并查看结果,结果如下:
SpringCloud负载均衡 Ribbon_第12张图片

结果:我们上面配的实例是”微服务提供商用户”,在打印出的结果,我们可以看到打印结果7901和7900是随机的;而实例”微服务提供商-user2” 来自的访问结果明显是有规则的7902,7903,是轮询策略。





阅读更多

你可能感兴趣的:(java)