如何做网约车用户打车部分
Go 语言网约车项目用户下单后系统是怎么把订单发给司机的在网约车项目里用户点击“立即叫车”以后后台并不是简单地保存一条订单就结束了。真正的流程是乘客下单↓后端创建订单↓把订单消息放进 RabbitMQ↓派单服务取出消息↓去 Redis 里找附近司机↓通过 WebSocket 推送给司机端↓司机接单一、用什么消息队列这个项目里推荐使用RabbitMQRabbitMQ 的作用可以理解为一个“中转站”。乘客下单后订单服务不用自己马上去找司机而是先把订单信息放到 RabbitMQ 里。然后派单服务再从 RabbitMQ 里拿订单去处理找司机、通知司机这些事情。二、为什么不直接发给司机因为下单这件事和派单这件事最好分开。如果用户一下单后端就立刻查司机、算距离、推送司机、等待司机回应那么下单接口会变得很慢。所以更好的做法是订单服务只负责创建订单派单服务只负责找司机、派单RabbitMQ负责在两个服务之间传消息这样系统结构更清晰也更稳定。三、RabbitMQ 是不是直接发给司机不是。RabbitMQ 是后端服务之间用的。它一般不会直接把消息发到司机手机上。真正通知司机端通常用WebSocket也就是说RabbitMQ 负责告诉派单服务有新订单了WebSocket 负责告诉司机 App你附近有新订单四、用户下单后的完整流程用户在乘客端选择上车点、目的地、车型然后点击下单。Go 后端收到请求后会先做一些校验用户是否正常起点和终点是否存在车型是否正确优惠券是否可用用户是否还有未完成订单校验通过后系统会创建订单。订单刚创建时状态一般是待接单然后系统把订单消息发送到 RabbitMQ。五、派单服务拿到消息后做什么派单服务从 RabbitMQ 中取出订单消息。然后它会去 Redis 里查找附近司机。这里会用到一个重要技术点Redis GEORedis GEO 可以根据经纬度查找附近的人。比如查找乘客 3 公里范围内的空闲司机找到司机后系统还可以按照一些规则排序距离最近评分较高接单率较高车型匹配当前空闲最后派单服务会通过 WebSocket 把订单推送给司机。六、这里涉及哪些技术点这个功能虽然看起来只是“用户下单”但背后包含很多核心技术。主要有这些Go 接口开发MySQL 订单存储RabbitMQ 消息队列Redis GEO 附近司机搜索WebSocket 实时推送订单状态流转消息幂等处理失败重试机制七、订单状态怎么变化一个网约车订单通常会经历这些状态待接单已接单司机到达行程中已完成已支付已取消用户刚下单时待接单司机接单后已接单司机到达上车点司机到达乘客上车后行程中到达目的地后已完成付款后已支付八、项目经理视角怎么理解从项目经理角度看这个功能不是单纯的“下单接口”。它其实可以拆成几个功能点乘客创建订单系统异步派单附近司机匹配司机实时接收订单司机接单乘客看到订单状态变化所以在排期时不能只安排一个“下单接口”。更合理的任务拆分是乘客下单接口RabbitMQ 订单消息发送派单服务消费订单消息Redis GEO 查询附近司机WebSocket 推送司机端司机接单接口订单状态更新九、总结在 Go 语言网约车项目中用户下单后系统一般不会直接同步通知司机。更合理的设计是Go 订单服务创建订单RabbitMQ 发送订单消息派单服务消费消息Redis GEO 查找附近司机WebSocket 推送给司机端司机接单后更新订单状态简单来说RabbitMQ 负责后端异步解耦Redis GEO 负责找附近司机WebSocket 负责实时通知司机MySQL 负责保存订单数据Go 负责把这些流程串起来