当前位置: 首页 > news >正文

Spring Cloud微服务架构详解:从服务注册到配置中心,阿里面试核心知识点

一、微服务架构核心概念

1.1 什么是微服务

传统架构:All in One ├── 前端应用 ├── 后端应用 ├── 数据库 └── 全部部署在同一台服务器 微服务架构: ├── 服务A(用户服务) ├── 服务B(订单服务) ├── 服务C(商品服务) ├── 服务D(支付服务) └── 消息队列 + 注册中心 + 配置中心

1.2 微服务优势

优势说明
独立部署每个服务可独立发布,不用影响其他服务
技术异构不同服务可用不同技术栈
容错隔离一个服务挂了不影响其他服务
可扩展按需扩展瓶颈服务

二、Eureka服务注册与发现

2.1 Eureka架构

┌─────────────┐ │ Eureka Server │ ← 注册中心 └───────┬───────┘ │注册/发现 ▼ ┌───────────────┐ │ Provider服务提供者 │ ← 启动时注册自己的地址 └───────────────┘ │ ▼ ┌───────────────┐ │ Consumer服务消费者 │ ← 从注册中心获取地址列表 └───────────────┘

2.2 服务端配置

server:port:8761eureka:instance:hostname:localhostclient:register-with-eureka:falsefetch-registry:falseserver:enable-self-preservation:false

2.3 客户端配置

spring:application:name:user-serviceeureka:client:register-with-eureka:truefetch-registry:trueservice-url:defaultZone:http://localhost:8761/eureka/instance:lease-renewal-interval-in-seconds:10lease-expiration-duration-in-seconds:30

三、Ribbon负载均衡

3.1 Ribbon核心组件

publicinterfaceIRule{publicServerchoose(Objectkey);}

Ribbon负载均衡策略:

策略类名原理
轮询RoundRobinRule依次选择
随机RandomRule随机选择
重试RetryRule轮询失败后重试
响应时间权重WeightedResponseTimeRule响应时间越短权重越高
最佳可用BestAvailableRule选择并发最低的

3.2 自定义负载均衡策略

publicclassMyRuleextendsAbstractLoadBalancerRule{@OverridepublicvoidinitWithNiwsServerList(ILoadBalancerlb){}@OverridepublicServerchoose(Objectkey){ILoadBalancerbalancer=getLoadBalancer();List<Server>servers=balancer.getReachableServers();returnservers.get(servers.size()-1);}}@ConfigurationpublicclassMyRibbonConfig{@BeanpublicIRulemyRule(){returnnewMyRule();}}

四、Feign声明式HTTP客户端

4.1 Feign_vs_Ribbon

对比RibbonFeign
调用方式RestTemplate接口+注解
代码量
可读性

4.2 Feign使用

步骤1:引入依赖

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

步骤2:开启Feign

@SpringBootApplication@EnableFeignClientspublicclassOrderApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderApplication.class,args);}}

步骤3:定义调用接口

@FeignClient(name="user-service",fallback=UserClientFallback.class)publicinterfaceUserClient{@GetMapping("/user/{id}")UsergetUserById(@PathVariable("id")Longid);@PostMapping("/user")UsercreateUser(@RequestBodyUseruser);}@ComponentpublicclassUserClientFallbackimplementsUserClient{@OverridepublicUsergetUserById(Longid){returnnewUser(-1L,"默认用户");}@OverridepublicUsercreateUser(Useruser){returnnull;}}

4.3 Feign超时配置

feign:client:config:default:connect-timeout:5000read-timeout:5000

五、Hystrix服务降级熔断

5.1 为什么需要Hystrix

用户 → 订单服务 → 用户服务 ↓ 用户服务挂了 ↓ 请求堆积,拖垮订单服务 ↓ 整个系统雪崩

5.2 Hystrix降级

@ServicepublicclassUserService{@HystrixCommand(fallbackMethod="getUserFallback")publicUsergetUserById(Longid){returnuserClient.getUserById(id);}publicUsergetUserFallback(Longid){returnnewUser(-1L,"服务繁忙,请稍后再试");}}

5.3 Hystrix熔断配置

hystrix:command:default:execution:isolation:thread:timeoutInMilliseconds:3000circuitBreaker:requestVolumeThreshold:20errorThresholdPercentage:50sleepWindowInMilliseconds:5000

熔断器三种状态:

Closed(关闭)→ 熔断打开 → Open(打开) ↑ ↓ └──── 过了熔断时间 ←───┘ Closed:正常调用 Open:请求直接降级,不调用服务 Half-Open:尝试放行一个请求测试

六、Gateway网关

6.1 Gateway_vs_Zuul

对比GatewayZuul
底层WebFlux(非阻塞)Servlet(阻塞)
性能一般
SpringCloud版本Finchley+Edgware及以前

6.2 Gateway配置

spring:cloud:gateway:routes:-id:user-routeuri:lb://user-servicepredicates:-Path=/user/**filters:-StripPrefix=1

6.3 全局过滤器

@ComponentpublicclassAuthFilterimplementsGlobalFilter{@OverridepublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){Stringtoken=exchange.getRequest().getQueryParams().getFirst("token");if(StringUtils.isBlank(token)){exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);returnexchange.getResponse().setComplete();}returnchain.filter(exchange);}}

七、Config配置中心

7.1 配置中心架构

┌─────────────┐ │ Git仓库 │ ← 配置文件存储 └──────┬──────┘ │ ▼ ┌─────────────┐ │ Config Server│ ← 配置中心服务 └──────┬──────┘ │ ▼ ┌─────────────┐ │ 业务服务 │ ← 启动时拉取配置

7.2 配置中心使用

Config Server:

server:port:8888spring:cloud:config:server:git:uri:https://github.com/xxx/config-repodefault-label:mastersearch-paths:config

业务服务:

spring:cloud:config:name:user-serviceprofile:devlabel:masterdiscovery:enabled:trueservice-id:config-server

7.3 配置刷新

@RestController@RefreshScopepublicclassUserController{@Value("${user.max-size}")privateintmaxSize;@GetMapping("/config")publicStringgetConfig(){return"maxSize = "+maxSize;}}

总结

组件作用关键词
Eureka服务注册发现心跳机制
Ribbon负载均衡轮询/随机/重试
Feign声明式HTTP接口+注解
Hystrix降级熔断线程隔离/熔断器
Gateway网关路由断言/过滤器
Config配置中心Git集成/自动刷新

http://www.jsqmd.com/news/700153/

相关文章:

  • 国产时频测试仪器的破局之路:从“时间守门人”到产业赋能者
  • [T.4.5] 实验课/团队项目:团队代码管理准备-Ver.5-final-final-ffffffinal最终版真的绝对不再改了!!(2)_1
  • FormKit深度解析:基于Vue ue 3的声明式表单框架实战指南
  • 如何在Blender中轻松导入导出3MF文件:3D打印工作流终极指南
  • 终极Windows更新修复指南:5分钟解决系统更新故障的完整方案
  • 告别‘BCD找不到’:深入理解UEFI时代Windows引导文件藏在哪里(GPT磁盘篇)
  • 告别繁琐存档修改:一站式网页版暗黑破坏神2存档编辑器
  • 李雅普诺夫吸引子驱动AI训练新范式
  • 2026年3月回门宴场地推荐,一站式婚礼/订婚宴/宝宝宴/户外花园婚礼/婚宴/生日宴/公司年会,回门宴门店找哪家 - 品牌推荐师
  • Visual Syslog Server终极指南:Windows系统日志集中监控免费方案
  • 从零开始:PCL启动器终极指南,轻松管理你的Minecraft世界
  • 解决:wsl: 检测到 localhost 代理配置,但未镜像到 WSL。NAT 模式下的 WSL 不支持 localhost 代理
  • 2026 年 DeepSeek 融资与 V4 发布:国产 AI 算力自主挑战与机遇并存
  • Llama-3.2V-11B-cot详细步骤:模型路径配置与自动加载机制解析
  • WinRAR CVE-2023-38831漏洞深度剖析:不只是双击压缩包那么简单
  • JVM调优实战:从垃圾回收到内存模型,一次性搞定JVM核心知识点
  • 51单片机实战:从直流电机调速到步进电机精确定位
  • MogFace人脸检测工具效果实测:cv_resnet101_face-detection_cvpr22papermogface极端姿态识别能力
  • 网站建设不只是「做个页面」:潍坊企业技术选型的五个关键判断
  • UIEffect终极指南:3分钟为Unity UI添加专业级视觉效果
  • 从0x000000D1蓝屏到系统稳定:深入剖析iaStorA.sys故障的根源与修复路径
  • D2RML终极指南:如何5分钟实现暗黑破坏神2重制版高效多开
  • 惊群效应(Thundering Herd)深度解析
  • TiDB 实战项目:从需求分析到生产级代码完整记录
  • 水族用品推荐 - 观域传媒
  • 暗黑破坏神2存档编辑革命:告别繁琐,拥抱网页端自由定制
  • 前荣耀CEO赵明首秀,千里科技欲三年内跻身智驾行业头部,目标能否达成?
  • Go语言中间代理库MPS:构建灵活HTTP/HTTPS流量控制中间件
  • GetQzonehistory:三步搞定QQ空间说说完整备份,永久珍藏你的数字记忆
  • 重庆江津云澜栖避暑房二手房折价率回归分析:哪些特征影响保值?