
面试中讲清楚微服务核心组件原理,关键不是堆砌名词,而是用“角色—职责—协作逻辑”三步说清每个组件在系统里真正干什么、为什么非它不可。下面按实际高频组件分块梳理,语言自然、逻辑连贯,背了就能直接用。
服务注册与发现(Nacos/Eureka)
它相当于微服务世界的“黄页+自动导航”。所有服务启动时,主动告诉注册中心“我在哪、叫什么、健康吗”,注册中心存下这个地址列表;其他服务要调用它时,不硬编码IP端口,而是问注册中心“user-service现在在哪”,拿到实时可用实例再发起请求。
重点讲清两个动作:
- 注册:服务启动后,通过心跳(如Nacos默认5秒一次)持续上报存活状态,断连超时就剔除
- 发现:消费者拉取全量或订阅变更,本地缓存服务列表,避免每次调用都查中心——这是性能关键
对比可提一句:Eureka是AP优先(高可用),Nacos支持AP/CP切换,适合需要强一致配置的场景。
声明式远程调用(OpenFeign)
它把“发HTTP请求”这件事彻底封装成接口调用。你写一个带@FeignClient注解的接口,定义方法签名和路径,Spring Boot启动时就自动生成代理对象——调这个方法,底层自动拼URL、序列化参数、发请求、反序列化结果。
真正体现设计功力的是它怎么和生态协同:
- 集成Ribbon或Spring Cloud LoadBalancer,自动从注册中心选一个健康实例
- 配合Sentinel或Resilience4j,方法调用失败时直接走降级逻辑,不用手动try-catch
- 支持拦截器(如加统一TraceID、鉴权头),所有Feign调用自动带上
服务网关(Spring Cloud Gateway)
它是所有外部请求进入系统的“唯一正门”。不只做路由转发,更承担横切职责:
- 路由匹配:根据路径、Header、参数甚至JWT内容,把/Order/**转给order-service,/User/**转给user-service
- 全局过滤:鉴权(检查token)、限流(每秒最多100次)、日志(记录入参和耗时)、熔断(某服务异常时返回兜底页)
- 协议转换:前端用HTTP,内部服务用gRPC?网关可以做适配(需额外扩展)
强调它和Nginx的区别:Gateway是Java进程内Filter链,能深度集成Spring生态(如用@Value注入配置),适合做业务逻辑级网关;Nginx更适合七层负载和静态资源。
流量防护(Sentinel)
它不是等出问题才响应,而是提前设好“安全线”。核心是三个维度控制:
- QPS限流:比如订单创建接口,设定每秒最多200次,超了就快速失败或排队
- 线程数隔离:支付服务调用三方银行接口慢,只让它最多占10个线程,不影响订单查询等其他功能
- 熔断降级:当支付失败率连续10秒超60%,自动切断调用,直接返回“支付暂不可用”,等5分钟再试探恢复
特别提一句规则来源:可以写在代码里,但生产环境一定用Nacos动态推送——改规则不用重启服务。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











