Nacos&ES&Mybatis-plus

Nacos

Nacos 核心能力

  1. 两大核心功能:注册中心(服务注册发现)、配置中心(动态配置下发)
  2. 使用价值:不用修改代码重启服务即可更新配置;微服务自动感知上下线,负载均衡调用

注册中心

微服务启动时把自己的实例信息注册到 Nacos,服务之间调用时,从 Nacos 获取健康可用的服务节点,实现服务自动发现、负载均衡。

项目场景:短信推送服务、运营后台、定时任务全部注册,互相远程调用不用写死 IP 地址。

配置中心

统一存放项目所有配置,集中管理,支持在线修改配置。

项目场景:短信渠道地址、第三方接口超时时间、活动开关、限流阈值全部放在 Nacos 配置中心。

记忆技巧:配置热更新免重启,微服务自动感知实例状态

Nacos 动态配置刷新原理

底层核心机制:长轮询

流程分步拆解: ① 客户端启动后,持续向 Nacos 服务端发送请求; ② 服务端不会立刻返回响应,会阻塞这条连接; ③ 如果配置一直没改动,连接超时断开,客户端重新发起请求; ④ 一旦配置被修改,服务端马上唤醒阻塞的连接,把最新配置推送给客户端; ⑤ 客户端收到变更数据,触发配置刷新。

@RefreshScope 注解作用

只有打上这个注解的 Bean,配置更新后里面的属性才会自动刷新; 普通 Bean 只在项目启动时读取一次配置,后续改 Nacos 配置不会生效,必须重启服务

记忆技巧:长轮询监听变更,RefreshScope 实现热更新

Nacos 项目落地踩坑点

  1. 配置修改后不刷新 原因:缺少@RefreshScope注解;dataId、分组、命名空间和项目不匹配。
  2. 微服务调用报错 原因:服务未完成注册;实例心跳超时被 Nacos 剔除;服务分组未统一。
  3. 多环境配置互相覆盖 解决方案:使用 namespace 区分开发、测试、生产三套环境,隔离配置。

Nacos 注册中心基础流程

记忆技巧:注册 + 心跳保活 + 订阅缓存 + 故障剔除推送

  1. 服务启动阶段:微服务启动后,主动向 Nacos 服务端注册自身实例 IP、端口等信息。
  2. 心跳保活阶段:客户端定时发送心跳包,告诉 Nacos 当前服务正常运行。
  3. 服务订阅缓存:调用方服务会订阅目标服务,本地缓存所有健康实例,本地完成负载均衡。
  4. 故障剔除推送:实例长时间没心跳,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
相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时2 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang2 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车2 天前
C/C++ 为什么需要编译器?
开发语言·c++