RabbitMQ怎么在工程实践中具体落地

半腔热情 提交于 2020-10-24 14:15:58

    消息中间件,我一直认为是对开发人员来说非常重要的一部分知识,但很少有人能把它精通。多数人都是为了面试或者是应付工作,学了很多遍,学了一些通用的零散的理论,而实际使用中,只会最基本的几个配置、几个命令。学了像是没学一样。时间久了,甚至有学它没什么用的感觉。

    其实理解消息中间件,对理解分布式非常有帮助。消息中间件学好了,甚至可以改造成分布式事务框架。

    我的好朋友Jacquie跟我说,同学们处在一个矛盾的情形下,一方面觉得好多课程里用到了MQ,都讲了几节,都学烂了,不想听了。另一方面,在专门讲MQ的专题课内,又觉得讲的理论化、脱离实际,用不到自己的工作中去。我们俩一合计,一起策划了这门课

    这就是我们俩的初心。

    课程上线后,作为一个“长尾却刚需的产品”,原本只是想默默打磨质量,没想过一炮走红,很匠人的心态去做。

    没想到却因为广受好评成为同期中非常有个性的一门课程,所以Jacquie她又代表慕课网,找到我来回访。

    有幸受访,我也又有了许多新收获。希望也可以对看文章的你有所帮助~


Jacquie:

短短一月,还跨越了十一长~~~假,课程却无论在课程评论区还是在QQ群内,都广受好评,而且都是“眼前一亮”“wow~ ⊙o⊙”的感觉,我来从几位同学的好评的角度,提出一些问题,我们一起做个复盘吧~

Moody: 

好的


http://img4.sycdn.imooc.com/5f9104470001b0d106450142.jpg

Jacquie:最初是怎么想到使用项目迭代的方式的,怎么选取设计的迭代点?

Moody: 

    RabbitMQ相信大家多少都用过一些,不过掌握程度参差不齐,很多同学还在用底层的Rabbit Client当作RabbitMQ客户端。所以这门课就想让同学们掌握更高级易用的客户端:Spring AMQP。而且在架构设计上,Spring AMQP的底层也是使用了Rabbit Client,所以一下子就想到了多次迭代的方式讲解Java项目引入RabbitMQ的方法:

  1. 学会消息的收发:使用Rabbit Client实现RabbitMQ的基本应用,

  2. 实现RabbitMQ的高级特性:使用Rabbit Client实现例如消息确认、消息返回等

  3. 使用Spring AMQP作为客户端,将项目深入整合进SpringBoot体系中

  4. 改造RabbitMQ本身,学习RabbitMQ集群的搭建与使用

  5. 开发基于Spring AMQP的RabbitMQ分布式事务框架。

    这几个层次环环相扣,步步为营,完全讲透了RabbitMQ的高级工程实践。



http://img3.sycdn.imooc.com/5f9104470001bfc303840266.jpg

Jacquie:项目从哪些维度体现了“消息事件驱动架构”,“订单状态机”是怎么实现的

Moody: 

    我们的实战项目是一个外卖订单系统,基于长时间的生产实战,我们将订单状态机状态机作为了订单系统的核心,订单创建过程有如下几个状态:

  • 创建中

  • 商户已确认

  • 骑手已确认

  • 已结算

  • 订单创建成功

  • 订单失败

    这就是订单状态机,订单必然处于上述的某个状态,而订单每次状态的变化,都需要消息的触发,这也体现了“消息事件驱动架构”的设计思想。比如:

    订单处于创建中状态时,如果收到了商户微服务的确认消息,订单状态就转为商家已确认



http://img3.sycdn.imooc.com/5f910447000149f705130118.jpg

Jacquie:

怎么在项目的基础上,改成SpringBoot Starter

Moody: 

    在课程的最后一章,我们和同学们一起开发实现了基于RabbitMQ的分布式事务框架。框架打包成jar包,可以方便地引入任何需要使用RabbitMQ的SpringBoot应用中。而且经过同学的提醒,我们的分布式事务框架可以方便地改造成SpringBoot Starter,真正变成SpringBoot组件级别的框架。只需要下面的几步:

  • 将我们的分布式事务框架改名,改为rabbitmq-plus-starter项目

  • 创建一个ConfigurationProperties用于保存配置信息(项目中本来使用了@Values注解,改成ConfigurationProperties更方便集中管理)

  • 创建一个AutoConfiguration,引用定义好的配置信息;在AutoConfiguration中实现所有starter应该完成的操作,并且把这个类加入spring.factories配置文件中进行声明

  • 打包项目,之后在一个SpringBoot项目中引入该项目依赖,然后就可以使用该starter了

    同学们在学习完课程后不妨试一下,更能提高自己对Spring Boot框架的理解。



http://img4.sycdn.imooc.com/5f9104470001a81406860201.jpg

Jacquie:

从个人角度看,为了这个课程的生产实践落地,做了哪些努力

Moody: 

    一个课程的制作和上线是一个系统工程,虽然我已在线上和线下已经有很多讲课经验,但是第一次和慕课网合作实战课程,还是有些压力。为了更好的跟大家呈现课程,我们选择了一个项目多次迭代的方式,循序渐进地将技术的来龙去脉展现出来:Java客户端基础入门->RabbitMQ高级特性->SpringBoot深度整合->RabbitMQ集群实战->RabbitMQ分布式事务实战。经过了这个路线,我相信同学们对于RabbitMQ的工程实战已经了然于胸了。在最为关键的分布式事务实战部分,为了让同学们对框架结构和业务流程有更深刻的认识,我们绘制了详细的流程图:


5f90f26f00010f3f05000134.jpg

   

努力从来没有白费,是金子早晚会发光!

课程的优惠马上就要结束了,再次向大家推荐我们课程,相信你会有很大的收获。

http://img3.sycdn.imooc.com/5f91052200015e5c04610051.jpg

PS:如果你看到这篇文章时不小心错过了优惠期,不要失望,你也可以加入购物车,等待马上到来的双十一。




点击查看更多内容
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!