文章内容输出来源:拉勾教育Java高薪训练营
学习心得
课程介绍
第六阶段 分布式消息服务中间件进阶
模块一 开源消息中间件RabbitMQ
本模块对市场上常用的开源消息中间件RabbitMQ进行深度源码剖析、并对ACK、限流、TTL、死信、延迟、集群等高级应用和原理进行讲解。
作业内容
基于RabbitMQ的TTL以及死信队列,使用SpringBoot实现延迟付款,手动补偿操作。
用户下单后展示等待付款页面
在页面上点击付款的按钮,如果不超时,则跳转到付款成功页面
如果超时,则跳转到用户历史账单中查看因付款超时而取消的订单
课程目录及观看建议
2倍速模式
课程3小时
作业3小时
***
必看
**
建议看
*
可不看
- 任务一:消息中间件概述
- 【课程资料】课程资料
- 课程介绍(时长:06:21)
- 分布式架构通信(时长:28:40)
- 自定义消息中间件(时长:18:32)
- 主流消息中心间及选型(时长:32:26)
- 消息中间件应用场景1-秒杀案例(时长:12:48)
- 消息中间件应用场景2-拉勾案例(时长:08:36)
- JMS经典模式详解1(时长:18:48)
- JMS经典模式详解2(时长:20:34)
- AMQP协议剖析(时长:26:25)
*
- 任务二:RabbitMQ架构与实战
- RabbitMQ逻辑架构(时长:09:47)
**
- RabbitMQ Exchange类型(时长:16:15)
**
- RabbitMQ的数据存储(时长:35:35)
- 安装配置RabbitMQ(时长:21:16)
***
- RabbitMQ常用命令1(时长:24:16)
- RabbitMQ常用命令2(时长:32:53)
- RabbitMQ实战案例(时长:43:40)
- Connection与Channel的关系1(时长:10:49)
- Connection与Channel的关系2(时长:32:07)
- RabbitMQ工作队列模式(时长:15:35)
**
- RabbitMQ发布订阅模式1(时长:33:07)
**
- RabbitMQ发布订阅模式2(时长:10:03)
**
- RabbitMQ路由模式(时长:22:42)
**
- RabbitMQ主题模式(时长:30:25)
***
- Spring整合RabbitMQ(时长:46:43)
- Spring注解整合RabbitMQ(时长:46:37)
- Spring注解整合RabbitMQ Listener(时长:21:35)
- SpringBoot整合RabbitMQ(时长:23:47)
***
- 任务三:RabbitMQ高级特性解析
- 消息可靠性1(时长:36:51)
- 消息可靠性2(时长:27:47)
- 消息可靠性之持久化存储机制(时长:16:08)
- 消息可靠性之消费端确认机制(时长:30:57)
- 消息可靠性之消费端限流机制(时长:26:08)
- 消息可靠性之消息可靠性保障(时长:11:22)
- 可靠性分析(时长:34:33)
- TTL机制解析(时长:32:56)
***
- 死信队列解析1(时长:19:48)
***
- 死信队列解析2(时长:05:18)
***
- 延迟队列解析(时长:44:00)
任务四:RabbitMQ集群与运维
任务五:RabbitMQ源码剖析
作业说明
实现思路
购买页面
支付页面
成功支付页面
超时订单信息页面
1. 在数据库中创建业务相关表。
以购买拉勾课程为例,一个订单只有一个课程,且电子虚拟商品忽略库存处理和物流信息。
课程表(course):课程id、课程名称、课程简介、课程价格、课程状态、备注、删除标识、创建时间、创建者、更新时间、更新者
用户表(user):用户id、用户名称、电话、邮箱、用户状态、备注、删除标识、创建时间、更新时间
订单表(order_info):订单id、用户id、课程id、课程价格、订单价格(课程价格 - 优惠价格)、订单状态、备注、删除标识、创建时间/下单时间、更新时间、过期时间
支付记录表(pay_info):支付id、用户id、订单id、流水id、支付方式、支付金额、支付状态、备注、创建时间/支付时间
本次作业只实现订单表和支付记录表,课程表和用户表省略。
2. 使用Spring Boot提供restful接口,供前端页面调用
获取课程信息:getCourseById(Integer courseId)
下单:order( Long userId, Integer courseId)
支付:pay(Long userId, Long orderId)
忽略通过打开第三方支付页面进行支付流程,直接完成支付状态
获取订单信息:getOrderInfoById(Long orderId)
本次作业只实现下单、付款、获取订单信息,获取课程信息省略。
3. 设计前端页面
课程信息页面:用于显示所售课程详细信息的页面,并提供购买按钮,完成下单操作。
支付页面:用户在课程购买页面中点击购买按钮后直接跳到待付款页面,此时后台已生成待付款订单。
支付成功页面:完成支付后,提示成功。
历史订单信息页面:支付订单超时的场合,用来查看超时失效的订单信息。
因时间紧张,本次作业实现页面比较简陋。
软件版本
RabbitMQ 3.8.5
Erlang 23.0.2
MySQL 5.7
Spring Boot 2.2.8
spring-boot-starter-web
mybatis-spring-boot-starter 2.1.3
实现步骤
- 安装RabbitMQ(可参看课程内容及课程讲义)
- 安装
socat
依赖 - 安装Erlang
- 安装RabbitMQ
- 启用RabbitMQ的管理插件
- 开启RabbitMQ
- 添加用户、标签和权限
设计数据库表结构
略搭建Spring Boot项目
建议首先按照课程视频和讲义搭建一个最简单的RabbitMQ工程,启动并实现消息的发送和接收。(参看课程任务二:18. SpringBoot整合RabbitMQ、讲义1.7 SpringBoot整合RabbitMQ)
然后再根据作业要求修改和添加相应代码。
步骤如下:
- 配置文件
application.yml
中设置mysql数据库和rabbitmq链接地址 -
RabbitConfig.java
中定义交换器和队列。包括延迟和死信,设置好延迟时间 -
OrderController.java
对外提供生产者的restful接口 -
OrderService.java
实现下单业务处理。下单时发送消息到延迟队列,并使用@RabbitListener
实现死信队列的监听处理,修改超时订单的数据库状态 -
PayController.java
对外提供消费者的restful接口(可以考虑新建另外的项目,独立部署) -
PayService.java
实现支付业务处理。支付时判断订单状态,返回相应结果 -
XxxMapper.java
和XxxMapper.xml
实现数据库操作 - 编写下单和支付的html页面(可以参看我的速推前端页面介绍)
测试流程
- 用户下单后展示等待付款页面。确认订单是否生成,TTL队列中是否有消息。
- 在页面上点击付款的按钮,如果不超时(10秒内),则跳转到付款成功页面。确认订单状态。
- 重新下单,超时支付,则跳转到用户历史账单中查看因付款超时而取消的订单。