Nacos
Nacos 核心能力
- 两大核心功能:注册中心(服务注册发现)、配置中心(动态配置下发)
- 使用价值:不用修改代码重启服务即可更新配置;微服务自动感知上下线,负载均衡调用
注册中心
微服务启动时把自己的实例信息注册到 Nacos,服务之间调用时,从 Nacos 获取健康可用的服务节点,实现服务自动发现、负载均衡。
项目场景:短信推送服务、运营后台、定时任务全部注册,互相远程调用不用写死 IP 地址。
配置中心
统一存放项目所有配置,集中管理,支持在线修改配置。
项目场景:短信渠道地址、第三方接口超时时间、活动开关、限流阈值全部放在 Nacos 配置中心。
记忆技巧:配置热更新免重启,微服务自动感知实例状态
Nacos 动态配置刷新原理
底层核心机制:长轮询
流程分步拆解: ① 客户端启动后,持续向 Nacos 服务端发送请求; ② 服务端不会立刻返回响应,会阻塞这条连接; ③ 如果配置一直没改动,连接超时断开,客户端重新发起请求; ④ 一旦配置被修改,服务端马上唤醒阻塞的连接,把最新配置推送给客户端; ⑤ 客户端收到变更数据,触发配置刷新。
@RefreshScope 注解作用
只有打上这个注解的 Bean,配置更新后里面的属性才会自动刷新; 普通 Bean 只在项目启动时读取一次配置,后续改 Nacos 配置不会生效,必须重启服务
记忆技巧:长轮询监听变更,RefreshScope 实现热更新
Nacos 项目落地踩坑点
- 配置修改后不刷新 原因:缺少
@RefreshScope注解;dataId、分组、命名空间和项目不匹配。 - 微服务调用报错 原因:服务未完成注册;实例心跳超时被 Nacos 剔除;服务分组未统一。
- 多环境配置互相覆盖 解决方案:使用 namespace 区分开发、测试、生产三套环境,隔离配置。
Nacos 注册中心基础流程
记忆技巧:注册 + 心跳保活 + 订阅缓存 + 故障剔除推送
- 服务启动阶段:微服务启动后,主动向 Nacos 服务端注册自身实例 IP、端口等信息。
- 心跳保活阶段:客户端定时发送心跳包,告诉 Nacos 当前服务正常运行。
- 服务订阅缓存:调用方服务会订阅目标服务,本地缓存所有健康实例,本地完成负载均衡。
- 故障剔除推送:实例长时间没心跳,Nacos 判定服务宕机,自动剔除该节点,并把变更推送所有订阅的客户端。
Elasticsearch ES
ES 适配海量日志检索
底层索引差异
- MySQL:主流是正向索引,擅长事务、增删改查;面对海量数据做模糊查询、多条件检索,效率极低,全表扫描消耗大量资源。
- ES:基于倒排索引,天然适配文本、日志类数据,支持分词、全文检索,海量数据下查询速度远快于 MySQL。
场景定位不同
- MySQL:优先存储核心业务数据,强调数据一致性、事务能力。
- ES:专为大数据检索、日志分析设计,不侧重强事务,主打快速检索、多维筛选。
业务落地(短信日志)
短信日志数据量大、以查询检索为主、很少修改删除,契合 ES 的使用场景;如果用 MySQL 检索海量日志,会出现查询慢、数据库压力大的问题。
MyBatis-Plus
MyBatis-Plus 分页 total 为 0
出现分页后总条数total始终为 0,核心原因 :项目中没有配置 MP 分页拦截器 MybatisPlusInterceptor。
- MP 分页功能依赖该拦截器自动执行统计总记录数的 SQL;
- 缺少拦截器时,只能实现分页截断,无法计算总数,最终
total=0。