若依微服务框架ruoyi-cloud实战:从零到一构建与部署指南
1. 环境准备与项目启动第一次接触若依微服务框架时我也被那一长串的环境依赖搞得头大。不过别担心跟着我的步骤来保证你能顺利跑起来。先说说硬件要求8G内存是底线16G会更流畅因为要同时跑Nacos、Redis、MySQL这些服务。开发工具我强烈推荐IntelliJ IDEA社区版就够用。装完IDE后按这个顺序配置环境JDK 1.8千万别用更高版本兼容性会出问题MySQL 5.7记得配置lower_case_table_names1Redis 6.x3.x也能用但建议用新版本Node.js 14.x12.x会有兼容性问题有个坑特别容易踩Nacos启动后访问不了8848端口。这时候检查两点是否开了防火墙建议直接关闭测试是否修改了nacos/conf/application.properties里的server.port我习惯用Docker快速搭建环境分享个一键脚本# MySQL docker run -p 3306:3306 --name mysql57 -e MYSQL_ROOT_PASSWORD123456 -d mysql:5.7 # Redis docker run -p 6379:6379 --name redis -d redis:6-alpine # Nacos docker run -p 8848:8848 --name nacos -e MODEstandalone -d nacos/nacos-server:1.4.12. 新建业务模块实战很多教程只讲理论我来个真实场景假设我们要开发个「员工考勤」模块。在ruoyi-modules目录右键新建module记住三个关键点目录结构要完全克隆system模块pom.xml里的artifactId改成ruoyi-attendance启动类命名规范RuoyiAttendanceApplication最麻烦的是Nacos配置我总结了个模板# ruoyi-attendance-dev.yml spring: datasource: url: jdbc:mysql://localhost:3306/ry_attendance?useUnicodetrue username: root password: 123456 mybatis: typeAliasesPackage: com.ruoyi.attendance.**.domain前端部分有个偷懒技巧直接复制system模块的views和api目录全局替换system为attendance。记得在src/store/modules/permission.js里添加路由{ path: /attendance, component: Layout, hidden: false, children: [ { path: index, component: () import(/views/attendance/index), name: Attendance, meta: { title: 考勤管理, icon: user } } ] }3. 微服务间调用详解上周刚踩过的坑A服务调用B服务的接口总是超时。后来发现是没配Feign的超时参数正确姿势是在application.yml添加feign: client: config: default: connectTimeout: 5000 readTimeout: 5000对象传参的坑更深分享个正确示例// 服务提供方 PostMapping(/employee/list) public RListEmployee list(RequestBody EmployeeQuery query) { return R.ok(service.selectEmployeeList(query)); } // 服务消费方 FeignClient(name ruoyi-organization, fallbackFactory RemoteEmployeeFallback.class) public interface RemoteEmployeeService { PostMapping(/employee/list) RListEmployee list(RequestBody EmployeeQuery query); }关键点双方DTO包路径要完全一致必须加RequestBody注解返回对象建议用R统一包装4. 生产环境部署方案真实项目部署要考虑的东西多多了这是我的checklist服务器配置4核8G起步实测2核4G跑三个服务就卡开放端口8848(Nacos)、6379(Redis)、3306(MySQL)、80/443(Nginx)启动顺序Nacos集群至少3节点Redis哨兵模式MySQL主从微服务jar包先启动auth和gatewayJVM参数优化nohup java -Xms512m -Xmx1024m -XX:MetaspaceSize128m \ -XX:MaxMetaspaceSize256m -jar ruoyi-gateway.jar \ gateway.log 21 Nginx配置技巧location / { try_files $uri $uri/ /index.html; root /data/www/dist; # 解决413请求体过大 client_max_body_size 20m; } location /prod-api/ { proxy_set_header Host $http_host; proxy_pass http://gateway:8080/; }5. 高频问题排查指南Nacos配置不生效检查bootstrap.yml里namespace是否正确确认配置的Data ID格式为${spring.application.name}-${spring.profiles.active}.yml页面按钮权限失效检查数据库sys_menu表的perms字段确认前端store/modules/permission.js里的权限字符串匹配事务不回滚确认方法上有Transactional检查是否抛出了RuntimeException避免同类内方法调用Redis缓存穿透使用Cacheable时设置空值缓存添加布隆过滤器最近在做一个政府项目时发现个隐藏bug当并发量超过500时网关会偶发熔断。最后发现是Sentinel规则配置不当解决方案是在gateway的application.yml添加spring: cloud: gateway: httpclient: pool: max-connections: 1000 acquire-timeout: 20000