首先,我们需要思考一个问题,如果同一个服务提供者在注册中心注册多个服务,那么用户怎么选择服务呢?所以,需要客户端来实现服务的负载均衡,而在SpringCloud中,推荐使用Ribbon来实现负载均衡。
Ribbon简介
Ribbon时Netflix发布的负载均衡器,它有助于控制HTTP和TCP客户端的行为。为Ribbon配置服务提供者地址列表后,Ribbon就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机等。我们也可以自定负载均衡算法。
有了Ribbon之后,我们的工程架构:
使用Ribbon
首先为order模块(Ribbon主要是帮助服务消费者)增加Ribbon依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>
但是eureka依赖中已经包含了,所以可省略。
然后为RestTemplate设置@LoadBalanced注解。之后,改造Item Service的实现:
之前的实现:
现在的实现:
到此,已经全部完成了负载均衡。当然,Ribbon还有很多其他的策略,如图所示,可以根据这些类深入类的内部进行探究。
一般的策略是默认策略,当然也有其他策略:
网友评论