SpringCloud与微服务技术栈整理
主线放这里,组件细节放单篇。
主线
先串 4 个问题:
1、服务怎么注册和发现
2、请求怎么从入口网关走到下游服务
3、配置、消息队列、分布式事务分别解决什么问题
4、调用链一长之后,哪里最容易出错
注册中心
Eureka 在前,Nacos 在后。
1 | spring: |
细节看:
2、Nacos服务
网关
Gateway 负责统一入口、路由转发、鉴权、限流、日志。
核心概念:
1、Route
2、Predicate
3、Filter
1 | server.port=8181 |
补充:
1、Route 决定请求转发到哪个服务
2、Predicate 决定什么请求命中这条路由
3、Filter 负责改写请求、鉴权、日志、限流
4、Filter 分本地 GatewayFilter 和全局 GlobalFilter
1 | spring.cloud.gateway.discovery.locator.enabled=true |
服务名路由打开后,网关可以直接按注册中心里的服务名转发。
Gateway 过滤链的执行顺序也要知道:命中路由后先进入 Gateway Handler Mapping,再经过 GatewayFilter 或 GlobalFilter,最后才转发给下游服务。
网关这一层常做 token 校验、内部接口拦截、统一异常返回。
公共能力
微服务里经常一起出现的还有定时任务、异步任务、缓存。
1、定时任务适合日报统计、补偿、清理类任务,逻辑不要写重。
2、异步任务适合发短信、发消息、刷缓存这类非主链路操作。
3、JWT 一般放在网关或认证服务做解析,Redis 常放验证码、登录态、缓存、幂等控制。
1 |
|
1 |
|
异步任务要单独配线程池和异常处理,不能默认把耗时方法直接丢进公共线程池。
网关存在的原因:
1、调用地址怎么统一管理
2、网关怎么做鉴权、限流和路由
3、异步解耦之后消息怎么投递和消费
4、跨服务写库失败时怎么兜底
组件
继续补:
MQ 解决削峰、异步、解耦;Seata 解决分布式事务。
顺序
1、SpringCloud学习,先把 Eureka 和注册发现跑通
2、再看 Nacos服务,理解很多项目从 Eureka 切到 Nacos 的原因
3、然后看 Springboot整合RabbitMQ,补异步消息
4、最后看 Seata分布式事务,补跨服务事务



