面试题答案
一键面试消息队列在分布式事务解决方案的常见场景
- 最终一致性场景:当系统对事务一致性要求不是强一致,允许一定时间内的数据不一致,但最终要达到一致状态时,消息队列可发挥作用。例如电商系统中订单支付成功后,需要更新用户积分、发送通知等多个操作,这些操作不要求与订单支付完全同步完成,通过消息队列异步处理,可保证最终数据的一致性。
- 跨服务交互场景:不同服务之间进行交互时,如订单系统与库存系统、物流系统等。这些服务可能使用不同技术栈、部署在不同服务器上,消息队列可作为中间桥梁,解耦服务之间的直接依赖,确保交互的可靠性。
订单系统和库存系统交互场景中消息队列协助实现分布式事务的过程
- 下单阶段
- 当用户下单时,订单系统生成订单数据,并将一条包含订单信息及库存扣减要求的消息发送到消息队列。
- 订单系统此时可向用户返回订单提交成功的响应,而不必等待库存系统的处理结果,实现了业务流程的异步化。
- 库存处理阶段
- 库存系统从消息队列中获取消息,根据订单中的商品及数量信息进行库存扣减操作。
- 如果库存扣减成功,库存系统可以向消息队列发送一条库存处理成功的确认消息(也可直接在原消息上标记处理成功状态)。如果库存不足或扣减失败,库存系统发送库存处理失败消息。
- 订单系统后续处理阶段
- 订单系统监听消息队列中库存系统返回的消息。
- 若收到库存处理成功消息,订单系统将订单状态更新为“已确认库存,等待发货”等相关状态,完成整个订单与库存交互的分布式事务。
- 若收到库存处理失败消息,订单系统将订单状态更新为“库存不足,订单失败”等状态,并可向用户发送相应提示信息,同时可考虑进行一些补偿操作,如释放已占用的其他资源等。
通过消息队列,订单系统和库存系统之间的交互更加可靠、解耦,在一定程度上保证了分布式事务的最终一致性。