Spring Cloud-Ribbon(负载均衡)相关笔记

hello你好我是辰兮很高兴你能来阅读,本篇是关于springcloud的Ribbon相关知识点的笔记,然后有一个生产者和消费者的案例,分享给初学者,希望对你有帮助,分享获取新知,大家一起进步!


一、Ribbon简介

Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。

Spring Cloud Ribbon优点:
负载均衡
容错
多协议(HTTP,TCP,UDP)支持异步和反应模型
缓存和批处理

在这里插入图片描述


Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。

Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。

因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括要学习的Feign,它也是基于Ribbon实现的工具。

所以,对Spring Cloud Ribbon的理解和使用,对于我们使用Spring Cloud来构建微服务非常重要。


客户端负载均衡

负载均衡是对系统的高可用、网络压力的缓解和处理能力扩容的重要手段之一。

我们通常所说的负载均衡都指的是服务端负载均衡,其中分为硬件负载均衡和软件负载均衡。

硬件负载均衡主要通过在服务器节点之间按照专门用于负载均衡的设备,比如F5等;

而软件负载均衡则是通过在服务器上安装一些用于负载均衡功能或模块等软件来完成请求分发工作,比如Nginx等。

服务端负载均衡图架构的构建方式

在这里插入图片描述


二、Ribbon案例

1.创建服务提供者项目

在项目文件夹中创建SpringBoot项目“spring-cloud-provider1”,添加如下依赖:

Spring web
Thymeleaf
Eureka Server

Maven添加“spring-cloud-provider1”项目pom文件,并同步依赖库
在这里插入图片描述
2.将服务提供者注册到注册中心

配置application.yml如下(defalultZone与注册中心一致)

server:
  port: 8762
spring:
  application:
    name: springcloud-provider1
eureka:
  client:
    service-url:
      defalultZone: http://localhost:8761/eureka/

在启动类添加@EnableEurekaClient声明当前类作为Eureka服务提供者启动

/**
 * 在启动类添加@EnableEurekaClient声明当前类作为Eureka服务提供者启动
 */
@EnableEurekaClient
@SpringBootApplication
public class SpringCloudProvider1Application {

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

}

3.创建服务(服务实际上就是一个访问接口)
创建控制器类,通过@RestController注解声明(默认@ResponseBody进行响应)

@RestController
public class Provider1Controller {

    @RequestMapping("provider1/get")
    public String provideData(){
        return "Hello,SpringCloud!--provider1";
    }

}

启动服务提供者项目“spring-cloud-provider1”

启动成功之后刷新Eureka注册中心访问页面,如下图表示服务提供者已经注册进来
在这里插入图片描述


1.创建服务消费者项目

在项目文件夹中创建SpringBoot项目“spring-cloud-customer1”,添加如下依赖:

Spring web
Thymeleaf
Eureka Server
Ribbon

在这里插入图片描述

Maven添加“spring-cloud-customer1”项目pom文件,并同步依赖库

在这里插入图片描述


2.配置服务消费者

配置application.yml如下(defalultZone与注册中心一致)

server:
  port: 8763
spring:
  application:
    name: springcloud-customer1
eureka:
  client:
    service-url:
      defalultZone: http://localhost:8761/eureka/

在启动类添加@EnableDiscoveryClient声明此应用为服务发现客户端(服务消费者)

/**
 * 在启动类添加@EnableDiscoveryClient声明此应用为服务发现客户端(服务消费者)
 */
@EnableDiscoveryClient
@SpringBootApplication
public class SpringCloudCustomer1Application {

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

}

3.消费服务(从服务提供者中请求数据)

通过Java配置类,实例化服务消费者访问工具对象RestTemplate

服务提供者只需要启动多个服务实例并注册到一个注册中心或是多个相关联的服务注册中心。

服务消费者直接通过调用被@LoadBalanced注解修饰过的RestTemplate来实现面向服务的接口调用。

这样,我们就可以将服务提供者的高可用以及服务消费者的负载均衡调用一起实现了。

@Configuration
public class AppConfig {

    @LoadBalanced //负载均衡配置(启动Ribon框架)
    @Bean
    public RestTemplate getRestTemplate(){
        return new RestTemplate();
    }
    
}

创建Service类,注入RestTemplate对象,访问服务

@Service
public class RibbonService {

    //注入消费者访问对象
    @Autowired
    private RestTemplate restTemplate;

    public String getMsg(){
        String str = restTemplate.getForObject("http://springcloud-provider1/provider1/get",String.class);
        return str;
    }
}

创建控制器注入service对象

@Controller
public class CustomerController {

    @Autowired
    private RibbonService ribbonService;

    @RequestMapping("customer1/get")
    @ResponseBody
    public String custome(){
        String str = ribbonService.getMsg();
        return str;
    }

}

启动消费者应用,通过访问服务消费者获取服务提供者提供的数据

在这里插入图片描述
这里我们发现可以读取到生产者的信息,代表消费成功!

下一期springcloud-zuul见


The best investment is to invest in yourself.

在这里插入图片描述

2020.10.20 晚23:25 愿你们奔赴在自己的热爱里!

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员橙子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值