Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
应用型负载均衡 ALB,每月750个小时 15LCU
简介: Spring Cloud 常用各个组件详解及实现原理(附加源码+实现逻辑图)


Eureka

注册中心组件,主要是用来做服务注册和服务发现的
每个服务在创建时,指定注册地址(往哪个Eureka中进行注册),又做了服务集群操作,当某个服务器挂了之后,不会影响其它服务的正常使用

Ribbon

是客户端实现负载均衡的远程调用组件起到一个中间的作用
实现方式:
  第一种是:ribbon和RestTemplate相结合使用,请求路径传给RestTemlate,利用负载均衡轮训算法完成调用
  第二种是:ribbon和OpenFeign相结合使用(发起一个远程调用,同时完成负载均衡的任务)
实现原理:
  1.通过用 Eureka-Client来做服务发现
  2.通过RestTemplate来完成服务调用上面和eureka结合,下面和IRule,实现负载均衡eureka服务发现

Open Feign

Open Feign远程调用组件
Feign集成了ribbon(不懂的可以去看下ribbon实现原理,这里直接上图解)
实现方式:
  A服务Controller开启@EnableFeignClients,在A服务接口类中添加注解@FeignClient(value = "order-service")指定调用的服务名称,参数格式要求下方图中查看

Gateway

网关组件:根据微服务名称,创建动态路进行转发,实现动态路由功能
动态路由优点:
当服务注册时,不需要重启服务端,动态去做负载均衡、服务发现,只需要加上服务名称即可
Geteway 的核心逻辑:路由转发+执行过滤器链
Gateway是web网关,处理的是Http请求

Hystrix

保护服务组件:保护微服务不雪崩,提供了熔断功能,能够阻止分布式系统中联动故障
hystrix通常和Openfeign和ribbon一起使用
hystrix本质是:代理feign的请求,才能完成熔断效果
hystrix实现原理:
  指定熔断的类,注解:@FeignClient(value = "rent-car-service",fallback = CustomerRentFeignHystrix.class)

定义熔断类

调用熔断类

下面说下断路器实现流程,先来说下为什么要使用断路器?

在微服务分布式架构开发中,会有很多独立的服务,当A服务去调用B服务时,一次发现没有反应,当A服务疯狂调用时,
B服务还是没有响应,这是猜测可能是B服务挂了,断路器作用就是当A要访问B服务时,拦截器知道B服务当前的一个状态,
正常继续使用,如果挂了直接return,类同于Hystrix

Nacos-feign

动态服务发现,配置管理和服务管理的平台
注册中心和配置文件中心
有登录验证
可以通过命名空间的形式进行调用服务,避免Nacos中出现重名的服务名称
实现原理:
  1. nacos-client-a 通过feign结合ribbon发起远程调用info接口
  2. @EnableDiscoveryClient // 开启服务发现客户端()
  3. @FeignClient(value = "user-service")(要调用对象的服务名称)

向Nacos中注册服务时,需指定nacos地址和用户名和密码以及命名空间、组

Nacos-配置中心

默认读取nacos配置中心文件 yml配置

Nginx和GeteWay区别

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
4天前
|
JavaScript Java 关系型数据库
自主版权的Java诊所管理系统源码,采用Vue 2、Spring Boot等技术栈,支持二次开发
这是一个自主版权的Java诊所管理系统源码,支持二次开发。采用Vue 2、Spring Boot等技术栈,涵盖患者管理、医生管理、门诊管理、药店管理、药品管理、收费管理、医保管理、报表统计及病历电子化等功能模块。
|
9天前
|
Java Spring
Spring底层架构源码解析(三)
Spring底层架构源码解析(三)
|
9天前
|
XML Java 数据格式
Spring底层架构源码解析(二)
Spring底层架构源码解析(二)
|
10天前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
24 0
|
10天前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
35 0
|
1月前
|
SQL 监控 druid
springboot-druid数据源的配置方式及配置后台监控-自定义和导入stater(推荐-简单方便使用)两种方式配置druid数据源
这篇文章介绍了如何在Spring Boot项目中配置和监控Druid数据源,包括自定义配置和使用Spring Boot Starter两种方法。
|
10天前
|
人工智能 自然语言处理 前端开发
SpringBoot + 通义千问 + 自定义React组件:支持EventStream数据解析的技术实践
【10月更文挑战第7天】在现代Web开发中,集成多种技术栈以实现复杂的功能需求已成为常态。本文将详细介绍如何使用SpringBoot作为后端框架,结合阿里巴巴的通义千问(一个强大的自然语言处理服务),并通过自定义React组件来支持服务器发送事件(SSE, Server-Sent Events)的EventStream数据解析。这一组合不仅能够实现高效的实时通信,还能利用AI技术提升用户体验。
54 2
|
2月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
|
10天前
|
SQL JSON Java
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
这篇文章介绍了如何在Spring Boot项目中整合MyBatis和PageHelper进行分页操作,并且集成Swagger2来生成API文档,同时定义了统一的数据返回格式和请求模块。
22 1
mybatis使用三:springboot整合mybatis,使用PageHelper 进行分页操作,并整合swagger2。使用正规的开发模式:定义统一的数据返回格式和请求模块
|
3月前
|
Java 测试技术 数据库
Spring Boot中的项目属性配置
本节课主要讲解了 Spring Boot 中如何在业务代码中读取相关配置,包括单一配置和多个配置项,在微服务中,这种情况非常常见,往往会有很多其他微服务需要调用,所以封装一个配置类来接收这些配置是个很好的处理方式。除此之外,例如数据库相关的连接参数等等,也可以放到一个配置类中,其他遇到类似的场景,都可以这么处理。最后介绍了开发环境和生产环境配置的快速切换方式,省去了项目部署时,诸多配置信息的修改。