JAVA 本地生活服务项目实战 家政 5.0 系统前后端分离部署
以下是一个完整的Java本地生活服务家政5.0系统前后端分离部署方案涵盖技术选型、架构设计、核心代码实现、部署流程及优化策略支持高并发与弹性扩展。一、技术栈选型1. 后端技术栈组件技术选型版本核心作用核心框架Spring Boot 3.1 Spring Cloud Alibaba2023.x微服务架构基础网关Spring Cloud Gateway3.1.x统一入口、路由、鉴权服务注册Nacos2.2.x服务发现与配置管理数据库MySQL 8.0 ShardingSphere-JDBC8.0.33分库分表支持高并发缓存Redis 7.0 (集群模式)7.0.12热点数据缓存、分布式锁消息队列RabbitMQ 3.123.12.0异步任务处理如派单、通知分布式事务Seata 1.7.01.7.0订单支付与库存一致性保障监控Prometheus Grafana2.47.x性能指标监控日志ELK (Elasticsearch Logstash Kibana)8.12.x日志收集与分析2. 前端技术栈组件技术选型版本核心作用用户端Vue 3 TypeScript Vite3.4.x响应式页面、组件化开发管理端React 18 Ant Design Pro18.2.x中后台管理系统移动端UniApp (跨端框架)3.9.x一套代码适配iOS/Android接口文档Swagger UI Knife4j3.0.3API可视化调试二、系统架构设计1. 微服务拆分mermaidgraph TD A[用户服务] -- B[Nacos] C[订单服务] -- B D[支付服务] -- B E[派单服务] -- B F[服务人员服务] -- B G[评价服务] -- B H[Spring Cloud Gateway] -- B H -- I[用户端/管理端/移动端]2. 核心模块交互流程用户下单用户端 → Gateway → 订单服务创建订单 → 支付服务生成支付链接 → 返回用户端支付回调第三方支付 → Gateway → 支付服务验证签名 → 订单服务更新状态 → 派单服务触发派单智能派单派单服务 → 查询附近服务人员 → 规则引擎计算评分 → 选择最优人员 → 更新订单状态三、核心代码实现1. 订单服务Spring Boot MyBatis-Plusjava// 订单实体类 Data TableName(t_order) public class Order { TableId(type IdType.ASSIGN_ID) private Long id; private Long userId; private String serviceType; private BigDecimal amount; private String status; // PENDING_PAYMENT, PAID, ASSIGNED, IN_SERVICE, COMPLETED private LocalDateTime createTime; } // 订单创建接口含分布式锁 RestController RequestMapping(/api/order) public class OrderController { Autowired private OrderService orderService; Autowired private RedissonClient redissonClient; PostMapping(/create) public Result createOrder(RequestBody OrderCreateRequest request) { String lockKey order:create: request.getUserId(); RLock lock redissonClient.getLock(lockKey); try { if (lock.tryLock(3, TimeUnit.SECONDS)) { return Result.success(orderService.createOrder(request)); } } finally { lock.unlock(); } return Result.fail(操作频繁请稍后再试); } } // 订单服务实现 Service public class OrderServiceImpl extends ServiceImplOrderMapper, Order implements OrderService { Override public Order createOrder(OrderCreateRequest request) { Order order new Order(); order.setUserId(request.getUserId()); order.setServiceType(request.getServiceType()); order.setAmount(request.getAmount()); order.setStatus(PENDING_PAYMENT); save(order); return order; } }2. 支付服务微信支付集成java// 支付配置类 Configuration public class WechatPayConfig { Value(${wechat.pay.app-id}) private String appId; Value(${wechat.pay.mch-id}) private String mchId; Value(${wechat.pay.api-key}) private String apiKey; Bean public WechatPayClient wechatPayClient() { return new WechatPayClient(appId, mchId, apiKey); } } // 支付接口 RestController RequestMapping(/api/pay) public class PayController { Autowired private WechatPayClient wechatPayClient; Autowired private OrderClient orderClient; // Feign调用订单服务 PostMapping(/create) public Result createPayUrl(RequestBody PayRequest request) { String payUrl wechatPayClient.createNativePayUrl( request.getOrderId(), request.getAmount().multiply(new BigDecimal(100)).intValue(), 家政服务- request.getServiceType() ); return Result.success(payUrl); } // 支付回调幂等处理 PostMapping(/notify) public String handleNotify(RequestBody String body, RequestParam String sign) { if (!wechatPayClient.verifySign(body, sign)) { return FAIL; } JSONObject json JSONObject.parseObject(body); String orderId json.getString(out_trade_no); String cacheKey pay:notify: orderId; if (redisTemplate.opsForValue().setIfAbsent(cacheKey, 1, 24, TimeUnit.HOURS)) { orderClient.updateStatus(orderId, PAID); // 调用订单服务更新状态 return SUCCESS; } return SUCCESS; } }3. 派单服务智能算法java// 服务人员评分计算 Service public class DispatchService { Autowired private ServiceProviderMapper providerMapper; public ServiceProvider assignBestProvider(Order order) { ListServiceProvider providers providerMapper.selectNearby( order.getLongitude(), order.getLatitude(), order.getServiceType() ); providers.forEach(provider - { double distanceScore 1 - Math.min(1, provider.getDistance() / 5); // 距离分0-1 double ratingScore provider.getAvgRating() * 0.4; // 评分占比40% double responseScore provider.getResponseRate() * 0.2; // 响应率占比20% double orderCountScore (1 - provider.getMonthlyOrderCount() / 100.0) * 0.1; // 订单量占比10% provider.setCompositeScore(distanceScore ratingScore responseScore orderCountScore); }); providers.sort(Comparator.comparingDouble(ServiceProvider::getCompositeScore).reversed()); return providers.isEmpty() ? null : providers.get(0); } }四、前后端分离部署方案1. 后端部署Docker Kubernetesyaml# order-service-deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: order-service spec: replicas: 3 selector: matchLabels: app: order-service template: metadata: labels: app: order-service spec: containers: - name: order-service image: registry.example.com/housekeeping/order-service:v1.2.0 ports: - containerPort: 8080 env: - name: SPRING_PROFILES_ACTIVE value: prod - name: NACOS_SERVER_ADDR value: nacos:8848 resources: limits: cpu: 1 memory: 2Gi --- apiVersion: v1 kind: Service metadata: name: order-service spec: selector: app: order-service ports: - protocol: TCP port: 8080 targetPort: 80802. 前端部署Nginx HTTPSnginx# nginx.conf 配置示例 server { listen 443 ssl; server_name api.example.com; ssl_certificate /etc/nginx/cert/example.com.pem; ssl_certificate_key /etc/nginx/cert/example.com.key; location / { root /usr/share/nginx/html/user-web; index index.html; try_files $uri $uri/ /index.html; } location /api { proxy_pass http://gateway-service:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }3. 部署流程后端部署编译打包mvn clean package -DskipTests构建镜像docker build -t order-service:v1.2.0 .推送镜像docker push registry.example.com/housekeeping/order-service:v1.2.0应用K8s配置kubectl apply -f order-service-deployment.yaml前端部署构建生产包npm run build复制到Nginx目录cp -r dist/* /usr/share/nginx/html/user-web重启Nginxsystemctl restart nginx五、性能优化与监控1. 数据库优化分库分表按用户ID哈希分库订单ID范围分表索引优化为高频查询字段如user_id、status添加索引读写分离主库写从库读2. 缓存策略热点数据缓存订单状态、服务人员信息缓存到Redis分布式锁使用Redisson防止重复下单缓存穿透/雪崩布隆过滤器 随机过期时间3. 监控告警Prometheus监控JVM内存、MySQL QPS、Redis命中率Grafana可视化看板AlertManager阈值告警如CPU使用率 80%六、总结技术亮点微服务架构 前后端分离 智能派单算法部署优势Docker容器化 K8s弹性扩缩容 Nginx负载均衡性能指标支持日均5万订单平均响应时间 200ms系统可用性 99.9%实际部署时需根据业务规模调整资源配额并通过全链路压测JMeter模拟2000并发验证系统稳定性。