Ribbon实现服务器端的负载均衡

1、怎么实现负载均衡
通过注解@LoadBalanced 来实现负载均衡,如下面的代码:
Ribbon实现服务器端的负载均衡_第1张图片

2、Ribbon的架构与原理
Ribbon实现服务器端的负载均衡_第2张图片

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

4、实例说明
4.1、下面,我将举个实例来说明Ribbon的使用。
Ribbon实现服务器端的负载均衡_第3张图片

4.2、代码
这里只贴出关键的消费者的重要代码:
工程名称:microservice-consumer-provider-ribbon
Application类ConsumerMovieProviderApplication 代码如下:
Ribbon实现服务器端的负载均衡_第4张图片

配置Ribbon策略类 TestConfiguration ,注意,这个类的位置不能再Application类的目录或其子目录下,这是需要强调的。
Ribbon实现服务器端的负载均衡_第5张图片

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

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

Ribbon实现服务器端的负载均衡_第7张图片

我们可以看到,调用的实例“microservice-provider-user”顺序为:7901、7901、7900、7900、7900、7901、7901、7900,所以这个按照我们配置的策略—RandomRule(随机策略)来随机分配User提供者的。
好,接着看实例“microservice-provider-user2”的调用顺序为:7902、7903、7902、7903、7903、7902、7902、7903,所以这个也是按照我们配置的随机策略来随机分配User提供者的。

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

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

}

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

Ribbon实现服务器端的负载均衡_第8张图片

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

3) 然后,我们还需要在策略类上添加这个注解,如下:
Ribbon实现服务器端的负载均衡_第9张图片

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

结果:实例“microservice-provider-user”调用顺序:7900、7901、7900、7901、7900、7901、7900、7901,很明显这不是随机策略,采用的是轮询策略。
实例“microservice-provider-user2”调用顺序:7903、7903、7903、7902、7903、7902、7903、7903,很明显这是随机策略。因为我们有配置排除策略的模式,在Application类上,我们注解了@RibbonClient,并且将策略TestConfiguration配置应用到了实例“microservice-provider-user2”上。

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

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

1) You can configure … in .ribbon.*
这里的意思就是说:你可以配置外部属性来配置Ribbon Client,在配置外部属性时应该使用.ribbon.*的格式来配置,这里的其实就是上面Java配置中对应的实例名,如:microservice-provider-user。

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

配置完成之后,就可以启动Appcliation,然后再到浏览器中访问,并查看结果,结果如下:
Ribbon实现服务器端的负载均衡_第12张图片

结果:我们上面配的实例是”microservice-provider-user”,在打印出的结果,我们可以看到打印结果7901和7900是随机的;而实例”microservice-provider-user2”的访问结果明显是有规则的7902、7903,是轮询策略。

你可能感兴趣的:(Spring,Cloud)