`

跟我学Spring Cloud(Finchley版)-07-Ribbon入门

 
阅读更多

说明:SpringCloud系列笔者自学系列,学习来源是周立的博客  http://www.itmuch.com/ 。而此处转载其博客只是为了方便自己以后的学习。

本篇来源 http://www.itmuch.com/spring-cloud/finchley-7/

经过前文讲述,我们已经实现了服务发现。本节来解决 跟我学Spring Cloud(Finchley版)-02-构建分布式应用 提到的如下问题:

负载均衡如何考虑?难道得在电影微服务和用户微服务之间加个NGINX做负载均衡吗?听起来是可行的,但如果有10000+服务(这并不夸张,我司的微服务数目是这个数字乘以N,N >= m,哈哈哈)那这个NGINX的配置得有多复杂……

一般来说,提到负载均衡,大家一般很容易想到浏览器 -> NGINX -> 反向代理多个Tomcat这样的架构图——业界管这种负载均衡模式叫“服务器端负载均衡”,因为此种模式下,负载均衡算法是NGINX提供的,而NGINX部署在服务器端。

本节所讲的Ribbon则是一个客户端侧负载均衡组件——通俗地说,就是集成在客户端(服务消费者一侧),并提供负载均衡算法的一个组件。

Ribbon简介

Ribbon是Netflix发布的负载均衡器,它可以帮我们控制HTTP和TCP客户端的行为。只需为Ribbon配置服务提供者地址列表,Ribbon就可基于负载均衡算法计算出要请求的目标服务地址。

Ribbon默认为我们提供了很多的负载均衡算法,例如轮询、随机、响应时间加权等——当然,为Ribbon自定义负载均衡算法也非常容易,只需实现IRule 接口即可。

TIPS

Ribbon的GitHub:https://github.com/Netflix/ribbon

引入Ribbon

在Spring Cloud中,当Ribbon与Eureka配合使用时,Ribbon可自动从Eureka Server获取服务提供者地址列表,并基于负载均衡算法,选择其中一个服务提供者实例。下图展示了Ribbon与Eureka配合使用时的大致架构。

图-Ribbon与Eureka配合

Ribbon入门

代码示例

  • 复制项目microservice-consumer-movie ,将ArtifactId修改为microservice-consumer-movie-ribbon 

  • 加依赖:由于spring-cloud-starter-netflix-eureka-client 已经包含spring-cloud-starter-netfilx-ribbon ,故而无需额外添加依赖。

  • 写代码:

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

    如代码所示,只需在RestTemplate 上添加LoadBalanced 注解,即可让RestTemplate整合Ribbon!

  • 调用:

     
    @GetMapping("/users/{id}")
    public User findById(@PathVariable Long id) {
      // 这里用到了RestTemplate的占位符能力
      User user = this.restTemplate.getForObject(
        "http://microservice-provider-user/users/{id}",
        User.class,
        id
      );
      // ...电影微服务的业务...
      return user;
    }

    由代码可知,我们将请求的目标服务改成了http://microservice-provider-user/users/{id},也就是http://{目标服务名称}/{目标服务端点} 的形式,Ribbon会自动在实际调用时,将目标服务名替换为该服务的IP和端口

测试

  • 依次启动microservice-discovery-eureka microservice-provider-user 两个实例、microservice-consumer-movie-ribbon
  • 访问http://localhost:8010/movies/users/1 多次,会发现两个user服务实例都会打印日志。

WARNING

事实上,这里的目标服务名称,在Ribbon里叫虚拟主机名 ,主机名是不能包含_ 等特殊字符的——这意味着,一般不建议配置spring.application.name = xxx_xxx ,如果你的应用名称一定(谁这么变态??)带有下划线这种字符,那么请额外配置eureka.instance.virtual-host-name = 一个合法的主机名 ,否则Ribbon将会提示虚拟主机名不合法的异常(在早期的版本则是报空指针)!这点请大家务必注意。

配套代码

GitHub:https://github.com/eacdy/spring-cloud-study/tree/master/2018-Finchley/microservice-consumer-movie-ribbon

Gitee:https://gitee.com/itmuch/spring-cloud-study/tree/master/2018-Finchley/microservice-consumer-movie-ribbon

相关文章

 

 

 

 

 

 

分享到:
评论

相关推荐

    SpringCloud-Finchley.SR1-Ribbon客户端负载均衡demo

    良心demo,可以再学习的过程中参考一下,官网的教程是真的需要好好琢磨的,这个可以作为辅助参考,demo采用的版本均为最新版本:springcloud2.0-Finchley.SR1版本,大神提醒我一句学习springcloud不要想的太复杂,...

    springcloud-Netflix-eureka demo 可做参考

    在分布式系统中,Spring Cloud是实现微服务架构的重要工具,而Spring Cloud Netflix Eureka则是Spring Cloud生态中的服务发现组件。本项目"springcloud-Netflix-eureka demo"提供了一个基于Spring Boot搭建的基础...

    spring-cloud-starter-netflix-ribbon-1.4.5.RELEASE.jar

    spring-cloud-starter-netflix-ribbon-1.4.5.RELEASE.jar

    Spring Cloud Finchley SR2全套(集成Spring Gateway)

    基于Spring Cloud Finchley SR2 Spring Boot 2.0.7的最新版本。 核心基础项目内实现类自定义的权限注解,配合RBAC权限模型+拦截器即可实现权限的控制,具体的参考项目中的实现。同时也封装了一些顶层类和结果集等。...

    springcloud-learning-master.zip

    本压缩包“springcloud-learning-master.zip”提供了一套完整的SpringCloud学习资料,包括Eureka、Ribbon、Nacos、SpringCloud以及Feign等多个组件的实践教程。 1. **Eureka**:Eureka是Spring Cloud Netflix项目的...

    springcloud-learning-master.zip springcloud学习合集

    本压缩包"springcloud-learning-master.zip"是一个关于SpringCloud学习的资源合集,包含了一系列的例子和教程,适合想要深入理解和掌握SpringCloud技术的开发者。 首先,我们要了解SpringCloud的基础概念。Spring...

    spring-cloud-examples-master

    《Spring Cloud实战详解:基于spring-cloud-examples-master的深度解析》 在当今的软件开发领域,微服务架构已经成为主流趋势,而Spring Cloud作为Java生态中的微服务治理框架,深受开发者们的喜爱。本篇文章将深入...

    spring-cloud项目_springcloud_springcloud项目_springcloud_spring-clou

    这个项目包含了基本的 Spring Cloud 组件,非常适合新手入门学习。你可以通过这个项目了解如何集成和配置这些组件,以及它们如何协同工作来构建一个完整的微服务架构。在实际开发中,还需要考虑其他方面,如安全性、...

    SpringCloud-Learning-master.zip

    《SpringCloud深度学习指南》 SpringCloud作为微服务架构中的热门框架,因其强大的服务治理功能和易用性,被广大开发者广泛采用。本资源“SpringCloud-Learning-master.zip”是程序猿DD关于SpringCloud的学习资料,...

    SpringCloud-2.0-order-hystrix-ribbon-8011.zip

    在这个名为"SpringCloud-2.0-order-hystrix-ribbon-8011.zip"的项目中,我们主要探讨的是如何利用Hystrix实现服务间的短路保护,以及Ribbon作为客户端负载均衡器的作用。 Hystrix是Netflix开源的一款强大的断路器库...

    基于Spring Cloud(Finchley版本)架构体系

    Spring Cloud Finchley是Spring Cloud的一个重要版本,它提供了一套微服务开发的工具集,用于构建分布式系统,如服务发现、配置管理、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式...

    spring-cloud-starter-netflix-ribbon-2.1.0.RELEASE.jar

    spring-cloud-starter-netflix-ribbon-2.1.0.RELEASE

    spring-cloud-starter-netflix-ribbon-2.2.2.RELEASE.jar

    spring-cloud-starter-netflix-ribbon-2.2.2.RELEASE

    springcloud-ribbon-feign-hystrix-zuul-config

    在Spring Cloud框架中,"springcloud-ribbon-feign-hystrix-zuul-config"这个标题涉及到四个关键组件:Ribbon、Feign、Hystrix和Zuul,以及配置管理Config。这些组件都是构建分布式系统时常用的服务发现、客户端负载...

    springcloud-demo-master_spring-cloud_cloud_

    【标题】"springcloud-demo-master_spring-cloud_cloud_" 指的是一个基于Spring Cloud的示例项目,这个项目主要用于学习和演示Spring Cloud的核心功能和基本流程。Spring Cloud是微服务架构的重要工具集,它提供了...

    Spring-cloud-demo-master.zip

    这个“Spring-cloud-demo-master.zip”文件是一个包含详细注释的入门级示例项目,旨在帮助初学者理解并掌握 Spring Cloud 的核心概念和功能。 项目中的文件结构通常包括以下几个关键部分: 1. **Eureka**:服务...

    springcloud-demo-master.zip

    《SpringCloud实战:基于"springcloud-demo-master.zip"的微服务构建详解》 SpringCloud作为当今最热门的微服务框架之一,为开发者提供了构建分布式系统所需的全套工具。本篇文章将围绕"springcloud-demo-master....

    spring-cloud-netflix-ribbon-2.1.0.RELEASE.jar

    spring-cloud-netflix-ribbon-2.1.0.RELEASE

    spring-cloud-netflix-ribbon-2.2.2.RELEASE.jar

    spring-cloud-netflix-ribbon-2.2.2.RELEASE

Global site tag (gtag.js) - Google Analytics