Spring Cloud Ribbon介绍

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】
免费领取 2000+ 道 Java 面试题

在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与微服务构建》 方志朋 著


来源:http://ddrv.cn/a/88268

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » Spring Cloud Ribbon介绍

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏