SpringCloud之Ribbon
在我的上一篇博客中简介了springCloud之Eureka服务治理,我们已经讲很多的服务注册到了注册中心里,那么我们就需要来处理如何把请求均与合理的分配到相同的服务器中去。这里我们就要使用到Ribbon负载均衡。Ribbon 是 Netflix 发布的云中间层服务开源项目,其主要功能是提供客户侧软件负载均衡算法,将 Netflix 的中间层服务连接在一起
对图例解释:当我们有多个客户端注册到Eureka Server的注册中心,Ribbon也相当于一个服务注册到服务中心,当有一个请求时,ribbon将会获取到这个请求对应的服务中去。
接下来我们尝试搭建Ribbon服务:
1.首先在pom.xml中添加依赖:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.4.4.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.4.RELEASE</version> </dependency>
<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2.在启动类中添加一个bean元素,是一个负载均衡的注解,并且实现负载均衡后你并不需要写ip地址+项目名了,直接写注册到服务中的服务名+项目名;
@Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); }
@Autowired RestTemplate restTemplate; @RequestMapping(value = "/ribbon-consumer",method = RequestMethod.GET) public String helloConsuer(){ //因为ribbon的作用是负载均衡,那么你直接使用ip地址,那么就无法起到负载均衡的作用,因为每次都是调用同一个服务,当你使用的是服务名称的时候,他会根据自己的算法去选择具有该服务名称的服务 return restTemplate.getForEntity("http://hello-service/hi/hello",String.class).getBody(); }这样简单的Ribbon负载均衡消费服务就达成了。