【原创】拉勾课程速推指南 第六阶段 分布式消息服务中间件进阶 模块一 开源消息中间件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. 重新下单,超时支付,则跳转到用户历史账单中查看因付款超时而取消的订单。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,816评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,729评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,300评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,780评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,890评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,084评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,151评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,912评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,355评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,666评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,809评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,504评论 4 334
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,150评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,882评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,121评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,628评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,724评论 2 351