# ekkjava-takeout **Repository Path**: memory00800528/ekkjava-takeout ## Basic Information - **Project Name**: ekkjava-takeout - **Description**: 练手用 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-27 - **Last Updated**: 2025-11-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ekkjava-takeout ## 项目介绍 ekkjava-takeout是一个基于Spring Boot微服务架构的外卖配送系统,包含用户、商家、订单、支付、骑手等核心模块,支持完整的外卖下单、支付、配送流程。 ## 核心机制 1. **微服务架构**:采用Spring Boot + Spring Cloud构建,实现服务的独立部署和扩展 2. **服务注册与发现**:使用Nacos作为服务注册中心,实现服务的动态发现和负载均衡 3. **消息队列**:使用RabbitMQ实现异步消息处理,提高系统吞吐量 4. **缓存机制**:使用Redis缓存热点数据,提高系统响应速度 5. **数据库设计**:采用MySQL存储业务数据,支持主从复制和分库分表 6. **分布式事务**:使用消息队列实现最终一致性 7. **服务降级与熔断**:使用Feign客户端实现服务间调用的降级和熔断 8. **健康检查**:使用Spring Boot Actuator实现服务健康状态监控 ## 模块说明 ### 1. 基础模块 - **common-core**:核心工具类和通用配置 - **common-db**:数据库公共配置和实体类 ### 2. 业务模块 - **service-user**:用户服务,负责用户注册、登录、地址管理 - **service-merchant**:商家服务,负责商家管理、商品管理 - **service-order**:订单服务,负责订单创建、状态管理、骑手分配 - **service-pay**:支付服务,负责支付处理、回调处理 - **service-rider**:骑手服务,负责骑手管理、位置更新、订单配送 - **service-ai-scheduler**:AI调度服务,负责智能订单分配 - **service-gateway**:网关服务,负责请求路由、限流、认证 ## 启动方式 ### 1. 环境要求 - JDK 17+ - Maven 3.8+ - MySQL 8.0+ - Redis 7.0+ - RabbitMQ 3.12+ - Nacos 2.3.2+ ### 2. 启动步骤 #### 2.1 启动中间件 ```bash # 启动Nacos(单机模式) docker run -d --name nacos -p 8848:8848 -e MODE=standalone nacos/nacos-server:v2.3.2 # 启动MySQL docker run -d --name mysql8 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root123 -e MYSQL_DATABASE=smart_takeaway mysql:8.0.33 # 启动Redis docker run -d --name redis -p 6379:6379 redis:7-alpine # 启动RabbitMQ docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.12-management-alpine ``` #### 2.2 初始化数据库 ```bash # 执行SQL脚本初始化数据库 mysql -u root -proot123 smart_takeaway < smart-takeaway-parent/sql/create_tables.sql mysql -u root -proot123 smart_takeaway < smart-takeaway-parent/sql/init_test_data.sql ``` #### 2.3 启动服务 ```bash # 编译项目 cd smart-takeaway-parent mvn clean install -DskipTests # 启动服务(按顺序) # 1. 启动service-user cd service-user mvn spring-boot:run -Dspring-boot.run.profiles=dev # 2. 启动service-merchant cd ../service-merchant mvn spring-boot:run -Dspring-boot.run.profiles=dev # 3. 启动service-rider cd ../service-rider mvn spring-boot:run -Dspring-boot.run.profiles=dev # 4. 启动service-order cd ../service-order mvn spring-boot:run -Dspring-boot.run.profiles=dev # 5. 启动service-pay cd ../service-pay mvn spring-boot:run -Dspring-boot.run.profiles=dev # 6. 启动service-ai-scheduler cd ../service-ai-scheduler mvn spring-boot:run -Dspring-boot.run.profiles=dev # 7. 启动service-gateway cd ../service-gateway mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` ### 3. 服务端口 | 服务名称 | 端口 | 健康检查端点 | |---------|------|------------| | service-user | 8080 | http://localhost:8080/actuator/health | | service-merchant | 8082 | http://localhost:8082/actuator/health | | service-rider | 8084 | http://localhost:8084/actuator/health | | service-order | 8083 | http://localhost:8083/actuator/health | | service-pay | 8086 | http://localhost:8086/actuator/health | | service-ai-scheduler | 8085 | http://localhost:8085/actuator/health | | service-gateway | 8081 | http://localhost:8081/actuator/health | ## 优势 1. **高可用性**:采用微服务架构,服务独立部署,单点故障不影响整个系统 2. **高性能**:使用Redis缓存热点数据,RabbitMQ实现异步处理,提高系统吞吐量 3. **可扩展性**:服务模块化设计,支持横向扩展 4. **安全性**:实现了完整的认证授权机制,保护系统安全 5. **智能调度**:集成AI调度算法,实现智能订单分配 6. **易于维护**:代码结构清晰,模块化设计,便于维护和扩展 7. **监控完善**:集成Actuator实现健康监控,便于运维管理 ## 解决过的bug ### 1. RabbitMQ认证问题 - **问题**:guest用户默认只允许本地访问,远程连接被拒绝 - **解决**:创建专用用户takeaway_user,授予管理员权限,并配置所有服务使用该用户连接 ### 2. RedisTemplate缺失 - **问题**:service-merchant服务启动失败,提示缺少RedisTemplate bean - **解决**:在service-merchant模块中添加RedisConfig配置类,提供RedisTemplate bean ### 3. 队列不存在问题 - **问题**:service-order服务启动失败,提示order.finish.queue队列不存在 - **解决**:在common-core模块的RabbitMQConfig中添加order.finish.queue队列的定义和绑定 ### 4. 组件扫描冲突 - **问题**:service-rider服务启动失败,提示bean名称冲突 - **解决**:调整主应用类的扫描范围,只扫描必要的包 ### 5. 虚拟主机配置错误 - **问题**:服务连接RabbitMQ失败,提示vhost / not found - **解决**:修改所有服务的RabbitMQ配置,使用正确的虚拟主机maess_vhost ### 6. Feign客户端负载均衡问题 - **问题**:Feign客户端调用服务时出现负载均衡错误 - **解决**:添加Spring Cloud LoadBalancer依赖,配置负载均衡策略 ### 7. 数据库连接池配置问题 - **问题**:服务启动时数据库连接池初始化失败 - **解决**:调整数据库连接池配置,增加最大连接数和超时时间 ## 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request ## 许可证 MIT License ## 联系方式 - 项目地址:https://gitee.com/yourusername/ekkjava-takeout - 作者:yourname - 邮箱:your@email.com