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。
相关推荐
Zenova EdgeOS1 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是1 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
FRing031 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2
Fatbobman(东坡肘子)3 小时前
快速消失的硬盘容量 -- 肘子的 Swift 周报 #160
开发语言·人工智能·redis·ios·swiftui·iphone·swift
揽星河..3 小时前
【C语言】底层程序设计
c语言·开发语言
JavaPub-rodert3 小时前
从零搭建通用管理后台:ShiyuAdmin 的 Go、React 与 RBAC 实践
开发语言·react.js·golang
海的透彻4 小时前
dockerfile如何快速构建容器(java服务)
java·开发语言
code2cat4 小时前
Java工具篇之Gradle:用任务图组织构建与交付
java·开发语言·单元测试·gradle
北京中科新远科技4 小时前
高速交换机端口预算怎么做?下行、上联、拆分和冗余计算框架
开发语言·php
xiaoye-duck5 小时前
《C++ 项目:手写大模型接入 SDK》DeepSeek接口设计(下):流式响应实现和测试
开发语言·网络·c++·语言模型