Spring Cloud 基础整理

本文介绍了Spring Cloud的基础知识,包括如何搭建Eureka服务器和客户端、服务间的调用、熔断机制、Zuul网关的应用以及配置中心的搭建。通过Spring Cloud集成Netfix的组件,如Eureka、Feign、Hystrix和Zuul,实现微服务的雪崩预防和统一入口。同时,文章探讨了Spring Cloud Bus的实际应用,强调了配置动态更新的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

简单说,spring cloud在微服务的技术领域,不是重复造轮子,而是把当前、微服务开发比较成熟的组件,都集成到spring中,而集成的方式,采用了springboot约定大于配置的理念,使得集成的过程简单,后期使用也简单。

因为springboot借着自动装配和启动依赖两个核心,提供了开箱即用风格,可以大量减少配置。但springboot只是快速的单个微服务开发,或单体应用的开发,真正要实现微服务架构的开发,还是需要在外继续封,从而最终形成了Spring Cloud。

Spring Cloud 微服务技术的集成

Spring Cloud用Spring Boot的方式集成的微服务技术,集成得最多的就是netfix公司的各项微服务技术。包括:

  • 服务发现-Eureka
  • 服务调用-Feign
  • 熔断器-Hystrix
  • 网关-Zuul

再结合spring cloud自身的组件一起提供了微服务解决方案

  • 分布式配置-spring cloud config
  • 消息总线-spring cloud bus

Spring Cloud 基本应用

搭建eureka服务器

就是pom加依赖,配置信息,再加EnableEurekaServer注解即可。

由于自己就是eureka服务器,所以不需要注册到eureka服务器,更不需要从eureka服务器获取注册信息。

注意EnableEurekaServer注解。

搭建eureka客户端

同样就是pom加依赖,配置信息,再加EnableEurekaClient注解即可。

1, 引入依赖

2,用注解配置启动类

3,yml中添加配置

服务之间的相互调用

 1,需要开启服务发现。

2,调用使用feign, A 服务调用B服务,A中添加依赖

A中添加这样的接口

注解里的名字和B里面的yml配置的一样。

A中的启动类加上注意的标签

被请求的b,在spring框架整合eureka的时候,就自己做了负载均衡。

熔断

一种防止雪崩的机制。

雪崩

雪崩,就是级联失败。

出现的步骤:

  • 服务提供者不可用
  • 重试加大流量
  • 服务调用者不可用

重试的原因包括:

  • 在服务提供者不可用后, 用户由于忍受不了界面上长时间的等待,而不断刷新页面甚至提交表单.        
  • 服务调用端的会存在大量服务异常后的重试逻辑. 

这些重试都会进一步加大请求流量.当服务调用者使用同步调用时, 会产生大量的等待线程占用系统资源. 一旦线程资源被耗尽,服务调用的服务也将处于不可用状态, 于是服务雪崩效应产生了.

最后, 服务调用者不可用 产生的主要原因是:同步等待造成的资源耗尽

熔断防止雪崩

防止的方式,当检测到依赖服务失败的时候,将调用转向另外一个分支,在那个分支可以友善处理失败,使得调用方不会一直等待已经失效的依赖服务,并不断累积等待所耗的资源,导致调用方也挂掉,恶性循环,出现级联失败。

实现方式就是给feign client接口写实现类,里面写这样的代码:

并且在feign client接口的FeignClient注解里,将fallback属性指向实现类。

把以下类容加入配置:

如果依赖服务的访问恢复正常,spring cloud会自动检测到恢复,不需要重启。自动。

网关ZUUL 

背景

各个微服务的端口是不一样的,客户端访问的时候,没有必要把每个端口都配一下,而且端口还要变。有了网关后,只需要维护一个网关的地址的信息,具体微服务的跳转,交给网关。

总结起来:

  • 隐藏通信细节
  • 解决跨越和认证

认证的时候,注意header 认证信息丢失的问题,header 认证信息需要在转发的时候,重新填上

网关作用的简单理解:

基本应用

网关也是euraka的client,和eureka管辖下的其他微服务没有啥本质区别。需要引入以下包

在配置文件里进行zuul的网关配置,主要是路径和具体微服务的对应关系。(当然作为eureka client的配置也要加上):

 

启动类要配置@EnableZuulProxy.

网关过滤器 

关于第一个:

关于最后一个

该过滤器类要用@Component注解。

过滤器的常见应用就是转发header信息

主要:如果要在过滤器里面验证header里的token,则需要放行以下:

防止连服务发现都实现不了。

注意options关键字。

同时对请求登录接口的请求也要放行:

搭建配置中心

项目会变得更复杂,但是后期运维成本会降低。所以将配置放在一个中心位置,便于修改和热部署。

采用spring cloud config,最后的配置是放在git中。

搭建配置中心微服务

还是引入依赖,编写配置项,加注解

注意@EnableConfigServer注解。

同时配置中心微服务仍然受eureka管辖。但是eureka的配置也可以放配置中心,由配置中心微服务去获取。

搭建配置中心服务器的客服端

引入依赖,编写配置项,即可

注意:

  • bootstrap.yml的执行优先级比application.yml高,先执行。
  • bootstrap存放的是系统级别的不经常变的操作,application存放的是应用级别,里面的配置容易随需求而变动。
  • bootstrap.yml里,去请求uri指向的配置中心微服务,获取{label}分支上名叫 {name}-{profile}这个配置文件

Spring Cloud Bus

基于以下背景:

1,配置改了的时候,服务不会反映出配置的更改,除非重启。

2,需要配置改的时候,自动让服务来一次重新编译。

3,所以需要每个微服务监听配置的修改。

4,也需要配置中心服务器能监听到更改,并且想MQ里认出一个消息。

实际应用

pom依赖

一个是需要使用BUS,一个是需要使用MQ

最后暴露出来的总线地址是需要人工去访问的,就是人工发现了 配置中心有更新,手动访问这个总线地址,就可以把消息扔到MQ上。

也就是说,谁在配置中心改了配置,谁就给 配置中心服务器,按上述总线地址发一个请求:

其他微服务:

多引入一个用于监听的依赖。

MQ的配置和配置中心服务器的一样。

在controller上加一个@RefreshScope注解 。

 

 

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值