Springcloud的核心组件之Ribbon

上篇文章详细介绍了springcloud的注册中心Eureka,那么这篇文章则会介绍springcloud的另外一个组件Spring Cloud Ribbon以及我们较为熟知同样起到了负载均衡作用的Nginx,二者又有怎样的区别呢?

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。 Spring Cloud Ribbon虽只是一个工具类框架,它在服务体系中起着重要作用,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务基础设施中。

如何集成Ribbon?

① 首先引入Ribbon依赖

其实这里不引用ribbon依赖也是可以的,因为在spring-cloud-starter-netflix-eureka-client依赖中已经包含了Ribbon Starter。

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

② 在启动类中添加@EnableDiscoveryClient注解

@EnableDiscoveryClient
@EnableEurekaClient
@SpringBootApplication
public class SpringcloudClientApplication {
public static void main(String[] args) {
SpringApplication.run(SpringcloudClientApplication.class, args);
}
}

③ RestTemplate的使用

提到Ribbon就必须要介绍一下RestTemplate!RestTemplate是Spring提供的一个访问Http服务的客户端类! 传统情况下访问restful服务,一般使用Apache的HttpClient。不过这种方式使用太过繁琐。spring提供了一种简单便捷的模板类进行操作,也就是RestTemplate类。

如下所示:

/**
* LoadBalanced:使RestTemplate以负载均衡的方式调用服务
* @return
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
 

④验证Ribbon的负载均衡

代码案例:

思路:1.启用注册中心,2.创建两个服务提供者,3.创建服务消费者,以restTemplate的方式调用服务提供者,查看ribbon组件是否以负载均衡的方式调用服务提供者。

1 :启动注册中心,可以参考之前的文章

注册中心启动,可以进群要源码

2:创建两个服务者,并启动

#服务端口    配置如下
server.port=8066
#服务名称
spring.application.name=provider-client
#服务地址
eureka.instance.hostname=localhost
#取消检索服务
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true #注册中心路径,表示向这个注册中心注册服务,如果向注册中心注册多个服务,用“,”进行分隔
eureka.client.serviceUrl.defaultZone=http://localhost:8011/eureka

3:创建控制器,提供服务,返回端口信息

@RestController
public class RibbonController {
@GetMapping("/testRibbon")
public String hello(String name , HttpServletRequest request){
//返回端口信息
return " 此时被调用的服务端口为: " + request.getServerPort() + " , hello " + name;
}
}

4:第二个服务提供者和上面类似只是配置文件的端口不一致

#服务端口
server.port=8077
#服务名称
spring.application.name=provider-client
#服务地址
eureka.instance.hostname=localhost
#取消检索服务
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true #注册中心路径,表示向这个注册中心注册服务,如果向注册中心注册多个服务,用“,”进行分隔
eureka.client.serviceUrl.defaultZone=http://localhost:8011/eureka

5:启动消费者,以RestTemplate方式调用

  • 配置文件如下:
#服务方端口
server.port=8091
#服务名称
spring.application.name=consumer-client-01
#服务地址
eureka.instance.hostname=localhost
eureka.instance.prefer-ip-address=true
eureka.instance.instance-id=consumer-client-01
#取消检索服务
eureka.client.fetch-registry=true
eureka.client.register-with-eureka=true
#注册中心路径,表示向这个注册中心注册服务,如果向注册中心注册多个服务,用“,”进行分隔
eureka.client.serviceUrl.defaultZone=http://localhost:8011/eureka
  • 使用RestTemplate类访问restful服务
@Configuration
public class RestTemplateTest {
/**
* 添加LoadBalanced,使RestTemplate以负载均衡的方式调用服务
* @Configuration:类上面务往添加@Configuration注解
* @return
*/
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
  • 创建控制器,调用服务提供者
@RestController
public class ConsumerController {
@Autowired
private RestTemplate restTemplate; //注入RestTemplate @GetMapping("/sayHello")
public String sayHello(String name){
String url = "http://provider-client/test?name=" + name;
String result = restTemplate.getForObject(url , String.class);
return result;
}
}
 

6:启动消费者服务,并查看注册中心注册情况

提供者和服务消费者成功注册到注册中心

7:访问服务消费者,验证服务调用是否以负载均衡方式

第一次访问端口为8066

第二次访问端口则为8077

发现两个服务提供者服务分别被调用了2次,说明Ribbon默认的负载均衡策略是轮询的方式。小伙伴们也可以多调用几次验证一下

Ribbon和Nginx的区别

Ribbon和Nginx都是起到负载均衡的作用,但是二者又有怎么样的区别呢??

Ribbon 是Netflix公司的一个处理负载均衡开源的项目,它是运行在服务端的负载均衡器,如下图。

Ribbon过程

如上图所示很清晰的描述了其工作原理就是Consumer端获取到了所有的服务列表之后,在其内部使用负载均衡算法,使用轮询的方式对多个服务进行调用。

nginx过程

相比Nginx我们可以看到的是Nginx是接收了所有的请求进行之后进行的负载均衡处理。

简单的总结来说:
Nginx: 服务器端负载均衡,ribbon在服务节点挂掉后,可以自动去除节点。
Ribbon:客户端负载均衡,nginx剔除不可用节点相对复杂。

欢迎关注公众号! 公众号回复:入群 ,扫码加入我们交流群!

扫码关注公众号获取更多学习资料

这样介绍Ribbon,从此任何问题也难不住你的更多相关文章

  1. springcloud(十二):Ribbon客户端负载均衡介绍

    springcloud(十二):Ribbon客户端负载均衡介绍 Ribbon简介 使用分布式微服务脚骨的应用系统,在部署的时候通常会为部分或者全部微服务搭建集群环境,通过提供多个实例来提高系统的稳定型 ...

  2. SpringCloud学习系列之二 ----- 服务消费者(Feign)和负载均衡(Ribbon)使用详解

    前言 本篇主要介绍的是SpringCloud中的服务消费者(Feign)和负载均衡(Ribbon)功能的实现以及使用Feign结合Ribbon实现负载均衡. SpringCloud Feign Fei ...

  3. spring cloud 微服务调用--ribbon和feign调用

    这里介绍ribbon和feign调用两种通信服务调用方式,同时介绍如何引入第三方服务调用.案例包括了ribbon负载均衡和hystrix熔断--服务降级的处理,以及feign声明式服务调用.例子包括s ...

  4. 从零开始学spring cloud(六) -------- Ribbon

    一.Ribbon介绍 Ribbon就是客户端侧负责均衡实现的一种方式,那么Ribbon是什么呢? Ribbon是Netflix发布的云中间层服务开源项目,其主要功能是提供客户端侧负载均衡算法.Ribb ...

  5. Spring Boot + Spring Cloud 构建微服务系统(二):服务消费和负载(Ribbon)

    使用RestTemplate调用服务 在上一篇教程中,我们是这样调用服务的,先通过 LoadBalancerClient 选取出对应的服务,然后使用 RestTemplate 进行远程调用. Load ...

  6. 服务消费和负载(Ribbon)

    使用RestTemplate调用服务 在上一篇教程中,我们是这样调用服务的,先通过 LoadBalancerClient 选取出对应的服务,然后使用 RestTemplate 进行远程调用. Load ...

  7. Spring Cloud微服务开发笔记5——Ribbon负载均衡策略规则定制

    上一篇文章单独介绍了Ribbon框架的使用,及其如何实现客户端对服务访问的负载均衡,但只是单独从Ribbon框架实现,没有涉及spring cloud.本文着力介绍Ribbon的负载均衡机制,下一篇文 ...

  8. Fluent Ribbon 第六步 StartScreen

    上一节,介绍了Toolbar的主要功能,说明了ToolBar的一些最基本用法,这一节,介绍Ribbon的一个重要功能startScreen, startScreen软件第一次启动,呈现的界面. 由于R ...

  9. Fluent Ribbon 第七步 状态栏

    上一节,介绍了StartScreen的主要功能,本节介绍Ribbon的另外一个小功能StatusBar,状态栏是脱离ribbon之外单独存在,可以单独使用的控件 其基本代码定义如下: <Flue ...

随机推荐

  1. NGK每日快讯」2021.1.27日NGK公链第85期官方快讯!

  2. 微信小程序:小程序中使用Less

    配置: 首选项 -> 设置 -> 用户 -> 扩展 (找到EasyLess插件,编辑setting.json文件进行配置) 点击vscode左下角的à设置à点击右上角的à添加以上代码 ...

  3. 如何用Eggjs从零开始开发一个项目(2)

    在上一篇文章,我们已经使用Sequelize连接上了数据库,并能进行简单的数据库操作,在此基础上,我们试着来开发一个完整的项目.这篇文章我们从用户的注册.登录着手,试着开发用户模块的相关的代码. 用户 ...

  4. “蚂蚁牙黑”太火,想玩就用ModelArts做一个!

    摘要:本文将介绍如何借力一站式 AI 开发平台,"傻瓜式"操作实现生成"蚂蚁牙黑"小视频. 作者:华为云EI专家胡琦 一夜之间,朋友圈都在"蚂蚁牙黑& ...

  5. 9.Vue之webpack打包基础---模块化思维

    主要内容: 1. 什么是模块化思维? 2.  ES6包的封装思想 一.什么是模块化思维呢? 现实工作中, 一个项目可能会有多个人同时开发. 然后, 将所有人开发的内容, 合并到一个文件中. 比如: 1 ...

  6. Docker搭建HAproxy+tomcat 实现高可用

    构建业务镜像1创建tomcat-app1和tomcat-app2两个目录,代表不同的两个基于tomcat的业务.准备tomcat的配置文件[root@localhost ~]#mkdir -p /da ...

  7. Java 集合框架 02

    集合框架· LinkedList 和 泛型 去除ArrayList中重复字符串元素 * A:案例演示 * 需求:ArrayList去除集合中字符串的重复值(相同内容的字符串) * 思路:创建新集合方式 ...

  8. window 10 下 --excel | power query 通过 ODBC链接 mysql 数据库

    excel链接到mysql的方法有几种,今天主要介绍如何通过ODBC链接 odbc是 "开放数据库连接",你可以通过下载插件使得自己的excel可以连接到不同的数据库. 关于版本的 ...

  9. C# 应用 - 使用 HttpClient 发起上传文件、下载文件请求

    1. 示例代码 using System; using System.IO; using System.Net.Http; /// <summary> /// 下载文件 /// </ ...

  10. 归一化(Normalization)和标准化(Standardization)

    归一化和标准化是机器学习和深度学习中经常使用两种feature scaling的方式,这里主要讲述以下这两种feature scaling的方式如何计算,以及一般在什么情况下使用. 归一化的计算方式: ...