【原创】拉勾课程速推指南 第六阶段 分布式消息服务中间件进阶 模块一 开源消息中间件RabbitMQ

文章内容输出来源:拉勾教育Java高薪训练营

学习心得

【拉勾课程速推指南】学习心得

课程介绍

第六阶段 分布式消息服务中间件进阶

模块一 开源消息中间件RabbitMQ

本模块对市场上常用的开源消息中间件RabbitMQ进行深度源码剖析、并对ACK、限流、TTL、死信、延迟、集群等高级应用和原理进行讲解。

作业内容

基于RabbitMQ的TTL以及死信队列,使用SpringBoot实现延迟付款,手动补偿操作。

  1. 用户下单后展示等待付款页面

  2. 在页面上点击付款的按钮,如果不超时,则跳转到付款成功页面

  3. 如果超时,则跳转到用户历史账单中查看因付款超时而取消的订单

课程目录及观看建议

2倍速模式
课程3小时
作业3小时
*** 必看
** 建议看
* 可不看

  • 任务一:消息中间件概述
  1. 【课程资料】课程资料
  2. 课程介绍(时长:06:21)
  3. 分布式架构通信(时长:28:40)
  4. 自定义消息中间件(时长:18:32)
  5. 主流消息中心间及选型(时长:32:26)
  6. 消息中间件应用场景1-秒杀案例(时长:12:48)
  7. 消息中间件应用场景2-拉勾案例(时长:08:36)
  8. JMS经典模式详解1(时长:18:48)
  9. JMS经典模式详解2(时长:20:34)
  10. AMQP协议剖析(时长:26:25)*
  • 任务二:RabbitMQ架构与实战
  1. RabbitMQ逻辑架构(时长:09:47)**
  2. RabbitMQ Exchange类型(时长:16:15)**
  3. RabbitMQ的数据存储(时长:35:35)
  4. 安装配置RabbitMQ(时长:21:16)***
  5. RabbitMQ常用命令1(时长:24:16)
  6. RabbitMQ常用命令2(时长:32:53)
  7. RabbitMQ实战案例(时长:43:40)
  8. Connection与Channel的关系1(时长:10:49)
  9. Connection与Channel的关系2(时长:32:07)
  10. RabbitMQ工作队列模式(时长:15:35)**
  11. RabbitMQ发布订阅模式1(时长:33:07)**
  12. RabbitMQ发布订阅模式2(时长:10:03)**
  13. RabbitMQ路由模式(时长:22:42)**
  14. RabbitMQ主题模式(时长:30:25)***
  15. Spring整合RabbitMQ(时长:46:43)
  16. Spring注解整合RabbitMQ(时长:46:37)
  17. Spring注解整合RabbitMQ Listener(时长:21:35)
  18. SpringBoot整合RabbitMQ(时长:23:47)***
  • 任务三:RabbitMQ高级特性解析
  1. 消息可靠性1(时长:36:51)
  2. 消息可靠性2(时长:27:47)
  3. 消息可靠性之持久化存储机制(时长:16:08)
  4. 消息可靠性之消费端确认机制(时长:30:57)
  5. 消息可靠性之消费端限流机制(时长:26:08)
  6. 消息可靠性之消息可靠性保障(时长:11:22)
  7. 可靠性分析(时长:34:33)
  8. TTL机制解析(时长:32:56)***
  9. 死信队列解析1(时长:19:48)***
  10. 死信队列解析2(时长:05:18)***
  11. 延迟队列解析(时长: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

实现步骤

  1. 安装RabbitMQ(可参看课程内容及课程讲义)
  • 安装socat依赖
  • 安装Erlang
  • 安装RabbitMQ
  • 启用RabbitMQ的管理插件
  • 开启RabbitMQ
  • 添加用户、标签和权限
  1. 设计数据库表结构

  2. 搭建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.javaXxxMapper.xml实现数据库操作
  • 编写下单和支付的html页面(可以参看我的速推前端页面介绍)

测试流程

  1. 用户下单后展示等待付款页面。确认订单是否生成,TTL队列中是否有消息。
  2. 在页面上点击付款的按钮,如果不超时(10秒内),则跳转到付款成功页面。确认订单状态。
  3. 重新下单,超时支付,则跳转到用户历史账单中查看因付款超时而取消的订单。

你可能感兴趣的:(【原创】拉勾课程速推指南 第六阶段 分布式消息服务中间件进阶 模块一 开源消息中间件RabbitMQ)