Spring Cloud Ribbon介绍

在Spring Cloud Eureka学习文章中,服务消费者调用服务提供者时,用到了@LoadBalanced注解,这个就是Spring Cloud Ribbon提供的功能。

我们当时搭建了一个Eureka Server 和两个Eureka Client,微服务之前互相进行调用。但是,调用的过程中就会存在问题,如何能够把请求均匀的打到多个服务提供者实例上呢?这就需要用到负载均衡。

负载均衡:

负载均衡是指将负载分摊到多个服务实例上。常见的负载均衡有两种方式,一种是通过独立的进程单元,将请求转发到不同的实例上。还有一种是通过程序编码的方式,在客户端通过负载均衡算法,选择一个需要请求的实例。
Nginx就属于第一种,Ribbon属于第二种。

Spring Cloud Ribbon是什么?

Ribbon是Netflix公司开源的客户端负载均衡器,可以控制Http和Tcp客户端的负载均衡。
Ribbon默认提供了很多负载均衡算法,如:轮询、随机等,也可以实现自定义的负载均衡算法。

在Spring cloud中,当Ribbon与Eureka结合使用时,Ribbon可以自动的从Eureka Server获取服务列表,基于负载均衡算法,进行服务调用。

如何使用Spring Cloud Ribbon

在Spring Cloud构建的微服务系统中,Ribbon作为客户端负载均衡器,有两种使用方式,第一种是和RestTemplate相结合,第二种是和Feign相结合。Spring Cloud Feign作为声明式调用客户端,已经默认集成了Ribbon,这个在后续的文章中会进行说明。本次的例子是按照第一种方式,和RestTemplate相结合来实现负载均衡。

还是基于之前创建的服务消费者microservice-consumer进行学习,Ribbon是属于客户端负载均衡器,所以,在服务消费者调用服务提供者的时候,进行负载均衡。(之前的文章中,服务消费者调用服务提供者时,已经通过Ribbon来实现了负载均衡的调用,只不过没有进行说明,这篇文章主要是对这种调用方式进行说明)

在microservice-consumer服务的pom文件中,添加依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-ribbon</artifactId>
</dependency>

接下来,为RestTemplate添加注解:@LoadBalanced

public class MicroServiceConsumeApplication {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    public static void main(String[] args) {
        SpringApplication.run(MicroServiceConsumeApplication.class, args);
    }
}

Spring Cloud Ribbon使用方式比较简单,只需要在RestTemplate添加@LoadBalanced注解,就可以为RestTemplate整合Ribbon,接下来RestTemplate的调用就基于负载均衡了。

接下来再看下具体调用的代码:

@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping(value = "/consumer", method = RequestMethod.GET)
    public String consumer() {
        return this.restTemplate.getForEntity("http://MICROSERVICE-PROVIDER/provider", String.class).getBody();
    }
}

以前请求服务提供者的时候,地址为http://localhost:8000/provider,现在改成了http://MICROSERVICE-PROVIDER/provider,这个MICROSERVICE-PROVIDER就是服务提供者的虚拟主机名。Ribbon和Eureka结合使用时,Ribbon就可以自动的把这个虚拟主机名映射成微服务的网络地址。

到了这一步,微服务的改造就算是完成了,当服务提供者有多个实例时,服务消费者再请求服务提供者,就会通过负载均衡,均匀的转发到不同的实例上。

参考资料:
1.《Spring Cloud与Docker微服务架构实战》 周立 著
2.《Spring Cloud微服务实战》 翟永超 著
3.《深入理解Spring Cloud与微服务构建》 方志朋 著

    原文作者:Spring Cloud
    原文地址: https://blog.csdn.net/chayangdz/article/details/81477705
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞