springcloud&springcloudAlibaba技术栈演示

项目地址

github:https://github.com/1738104233/springcloud-springcloudAlibaba.githttps://github.com/1738104233/springcloud-springcloudAlibaba.git

gitee:

springcloud-springcloudAlibaba: 提供了spring cloud + spring cloud Alibaba技术体系效果演示https://gitee.com/cl-repository/springcloud-springcloudAlibaba.git

使用说明

  • 主pom结构选择:
  • dependencies和dependencyManagement的区别:
    1. dependencies: 子项目中不配置也会自动继承此依赖和依赖的版本,可以直接使用
    1. dependencyManagement: 子项目不会继承此依赖和依赖版本,如果子项目需要使用此依赖,
  • 要在子项目中进行配置,此时可以省略版本号配置,使用父项目中配置的版本号
  • (即不用写groupId和version,先在父pom寻找,再到子类找,如果子类没有声明则引用父pom,子类声明了则以子类为准)
  • 子项目说明:
  • cloud-api-commons:自己封装的pojo打包成jar,放到你自己的maven仓库里作为依赖在其他子项目引入使用
  • SQL:mysql-files
  • ########################## springcloud ##########################
  • 分布式中的CAP理论:AP(Eureka),CP(Zookeeper/Consul)
  • (注册中心集群大同小异,模仿eureka写的配置即可)
  • ----eureka有自我保护机制----
  • cloud-eureka-server7001:eureka注册中心(有集群、单机两种配置)
  • cloud-eureka-server7002:eureka注册中心(有集群、单机两种配置)
  • cloud-consumer-order80:消费者,使用eureka作为注册中心,client,(有集群、单机两种配置,消费者可不注册到注册中心)
  • cloud-provider-payment8001:生产者,使用eureka作为注册中心,server(有集群、单机两种配置)
  • cloud-provider-payment8002:生产者,使用eureka作为注册中心,server(有集群、单机两种配置)
  • ----zookeeper服务节点是临时节点----
  • cloud-consumerzk-order80:消费者,使用zookeeper作为注册中心
  • cloud-provider-payment8004:生产者,使用zookeeper作为注册中心
  • ----consul有图形化界面 http://ip:8500----
  • cloud-consumerconsul-order80:消费者,使用consul作为注册中心
  • cloud-providerconsul-payment8006:生产者,使用consul作为注册中心
  • ----ribbon 负载均衡+restTemplate调用----
  • cloud-consumer-order80:消费者(有手写负载均衡轮询算法)
  • cloud-provider-payment8001:生产者
  • cloud-provider-payment8002:生产者
  • ----openFeign = ribbon+hystrix 注解形式,集成并简化了ribbon,自带负载均衡,用在消费端----
  • cloud-consumer-feign-order80:消费者(有超时控制、日志功能增强)
  • cloud-provider-payment8001:生产者
  • cloud-provider-payment8002:生产者
  • ----hystrix ----
  • cloud-consumer-feign-hystrix-order80:openFeign使用hystrix(配置远程调用fallback)
  • cloud-provider-hystrix-payment8001:服务降级,服务熔断(有全局降级)
  • cloud-consumer-hystrix-dashboard9001:仪表盘监控(访问:http://localhost:9001/hystrix)
  • ----geteWay ----
  • cloud-gateway-gateway9527:网关,使用eureka作为注册中心(route(路由),predicate(断言),filter(过滤))
  • ----config 使用github....等挂载配置文件----
  • #运维发送curl -X POST "http://localhost:3355/actuator/refresh"动态刷新客户端
  • cloud-config-center-3344:config服务端配置
  • cloud-config-client-3355:config客户端配置(client动态刷新)
  • ----springCloudBus 支持两种消息代理:RabbitMQ和Kafka----
  • #本项目使用的rabbitMQ,运维发送curl -X POST "http://localhost:3344/actuator/bus-refresh"即可动态刷新全部客户端(全局广播)
  • cloud-config-center-3344:服务端
  • cloud-config-client-3355:客户端
  • cloud-config-client-3377:客户端
  • ----stream 使用RabbitMQ----
  • cloud-stream-rabbitmq-provider8801:生产者
  • cloud-stream-rabbitmq-consumer8802:消费者(有分组消费和消息持久化)
  • cloud-stream-rabbitmq-consumer8803:消费者(有分组消费和消息持久化)
  • ----Sleuth 需要下载zipkin: https://repo1.maven.org/maven2/io/zipkin/zipkin-server/----
  • cloud-consumer-order80:消费者
  • cloud-provider-payment8001:生产者
  • ########################## springcloud Alibaba ##########################
  • ----nacos 支持AP,支持CP,可以互相切换(CAP这三个是不能同时存在的)----
  • nacos为什么支持负载均衡:旧版jar包自带了ribbon,新版需要自己整合,或者使用openFeign
  • cloudalibaba-provider-payment9001:生产者 (nacos作为服务注册中心)
  • cloudalibaba-provider-payment9002:生产者 (nacos作为服务注册中心,有注册到集群)
  • cloudalibaba-consumer-nacos-order83:消费者 (nacos作为服务注册中心)
  • cloudalibaba-config-nacos-client3377:nacos作为服务配置中心
  • nacos持久化:nacos默认自带的嵌入式数据库derby切换成mysql
  • nacos集群:1个nginx+3个nacos注册中心+1个mysql
  • ----sentinel 控制台:http://localhost:8080----
  • cloudalibaba-sentinel-service8401:sentinel演示(流控、降级、热点、系统...控制台配置搭配api使用,有sentinel持久化规则到nacos)
  • cloudalibaba-provider-payment9003:生产者
  • cloudalibaba-provider-payment9004:生产者
  • cloudalibaba-consumer-nacos-order84:消费者(自定义兜底返回,有ribbon版、openFeign版)
  • ----seata ----
  • seata分布式事务解决方案,三个数据库演示:
  • seata-order-service2001
  • seata-order-service2002
  • seata-order-service2003
<think>嗯,用户想做一个代驾服务平台的毕业设计,用微服务架构,SpringCloudSpringCloudAlibaba,数据库用MySQL和Redis,小程序用微信的。角色有司机、用户和管理员。那我得先理清楚需求,再考虑技术实现。 首先,用户可能对微服务不太熟悉,虽然是毕业设计,但需要展示出微服务的各个组件,比如服务注册发现、配置中心、网关等。SpringCloudAlibaba的组件比如Nacos、Sentinel、Seata这些应该用上。数据库方面,MySQL做持久化,Redis处理缓存和会话,比如登录状态或者验证码。 然后角色划分,三个端:用户端小程序、司机端小程序、管理端可能是Web或者另一个小程序。需要明确每个端的功能。用户端需要下单、查看订单、支付;司机端接单、导航;管理端审核司机、处理投诉、数据统计。 接下来是微服务拆分。可能需要用户服务、订单服务、支付服务、司机服务、消息推送服务、地理位置服务。每个服务独立数据库,用SpringCloud的Feign或者OpenFeign做服务间通信。数据库分库分表的话,毕业设计可能不需要太复杂,但至少每个服务有自己的数据库。 技术选型方面,注册中心用Nacos,配置中心也用Nacos,网关用SpringCloud Gateway,熔断降级用Sentinel,分布式事务用Seata。消息队列可以用RocketMQ,但如果是毕业设计,可能RabbitMQ或者Kafka更简单?不过既然用了SpringCloudAlibaba,可能RocketMQ更合适。 数据库设计方面,用户表、司机表、订单表、支付记录表、地理位置信息表。Redis用来存会话、验证码、司机位置缓存,或者订单状态的变化,用发布订阅模式通知司机。 小程序端,用户和司机端用微信小程序,管理端可能用Uniapp或者Web管理后台。需要考虑微信登录、获取用户位置、支付接口整合。支付部分可能需要对接微信支付,生成预支付订单,回调处理。 接口安全方面,用JWT做认证,网关统一鉴权。服务间调用用Feign,传输对象DTO。分布式事务的话,订单创建和支付可能需要Seata的AT模式。 可能遇到的问题:服务划分是否合理,分布式事务处理,地理位置实时更新,订单状态机设计,支付回调的处理,消息推送的及时性。比如司机接单后如何实时通知用户,可以用WebSocket或者小程序的消息订阅。 测试方面,用Postman测试接口,压测用JMeter,保证各个服务在高并发下正常工作,熔断降级策略生效。 部署的话,可能用Docker容器化,每个服务一个容器,用Nginx做反向代理,MySQL主从复制,Redis哨兵模式,但毕业设计可能单机部署就够了。 文档部分需要详细的设计文档,包括需求分析、架构设计、数据库ER图、接口文档、部署步骤。代码结构清晰,符合Restful风格,有注释。 用户可能没有提到的点:司机审核的流程,用户评价系统,费用计算规则,优惠券或促销活动,订单超时处理,司机的接单半径设置,实时位置追踪的地图API选择(比如高德或腾讯地图),还有可能需要的调度算法,比如就近分配司机。 需要提醒用户注意毕业设计的范围,不要过于复杂,确保在时间内完成核心功能。比如先实现下单、接单、支付流程,再扩展其他功能。</think>以下是为您设计的代驾服务平台小程序实现方案(采用微服务架构): 一、系统架构设计 1. 技术栈组合: - 微服务框架:SpringCloud + SpringCloudAlibaba (Nacos/Sentinel/Seata) - 数据存储:MySQL 8.0(主库) + Redis 7.0(缓存) - 小程序端:微信小程序(Uniapp框架) - 其他组件:RocketMQ(消息队列)、MinIO(文件存储) 二、微服务模块划分 $$ \begin{array}{|c|c|} \hline \text{服务名称} & \text{核心功能} \\ \hline 用户服务 & 注册登录、身份认证、用户画像 \\ 订单服务 & 订单创建/查询/状态流转 \\ 支付服务 & 微信支付对接、账单管理 \\ 司机服务 & 司机审核、状态管理、接单逻辑 \\ 位置服务 & 实时定位、路线规划 \\ 消息服务 & 推送通知、站内信 \\ 监控服务 & 服务健康监测、日志收集 \\ 管理服务 & 数据统计、业务配置 \\ \hline \end{array} $$ 三、核心功能实现 1. 用户端功能: - 地图定位服务:集成腾讯地图API - 订单流程:$ \text{下单} \rightarrow \text{派单} \rightarrow \text{服务} \rightarrow \text{支付} \rightarrow \text{评价} $ - 支付系统:对接微信支付SDK,采用分布式事务(Seata保证数据一致性) 2. 司机端功能: - 实时接单:通过WebSocket实现订单推送 - 导航系统:调用高德地图导航API - 收益结算:采用T+1结算机制 3. 管理端功能: - 驾驶行为分析:通过Redis GEO实现位置轨迹记录 - 智能调度:基于K-Means算法的司机匹配策略 - 数据可视化:Echarts展示业务指标 四、数据库设计要点 1. MySQL分库策略: $$ \text{用户库} \quad \text{订单库} \quad \text{支付库} \quad \text{司机库} $$ 2. 核心表设计: - 订单表:包含字段(order_id, user_id, driver_id, start_geo, end_geo, price, status) - 位置轨迹表:采用时空索引优化查询效率 五、关键问题解决方案 1. 分布式事务: ```java // 使用Seata的AT模式示例 @GlobalTransactional public void createOrder(OrderDTO orderDTO) { // 1.扣减用户余额 userService.deductBalance(); // 2.创建订单记录 orderService.create(); // 3.发送MQ消息 messageService.sendCreateMsg(); } ``` 2. 高并发处理: - Redis缓存:热点数据(如司机位置)采用$ \text{Redis GEO} $存储 - 限流策略:Sentinel配置QPS阈值$ Q_{\text{max}}=2000 $ 六、部署方案 1. 开发环境:Nacos集群(3节点) + MySQL主从(1主2从) 2. 生产建议:K8s容器化部署,采用$ \text{Ingress} $实现流量分发 七、毕业设计拓展建议 1. 创新点设计: - 基于神经网络的ETA预测模型 - 司机信用评分体系(参考FICO评分模型) 2. 答辩亮点: - 实现完整的分布式事务场景 - 展示Sentinel熔断监控看板 - 对比传统架构与微服务架构的性能指标 建议开发路线:先搭建基础框架(2周)→ 实现核心业务流程(3周)→ 开发管理功能(1周)→ 测试优化(2周)。注意控制功能范围,确保在毕业周期内完成可演示的最小可行产品。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值