mall :rabbit项目源码解析

文章目录

    • 一、mall开源项目
      • 1.1 来源
      • 1.2 项目转移
      • 1.3 项目克隆
    • 二、RabbitMQ 消息中间件
      • 2.1 rabbit简介
      • 2.2 分布式后端项目的使用流程
      • 2.3 分布式后端项目的使用场景
    • 三、安装RabbitMQ(Win10)
      • 3.1安装erLang语言,配置环境变量
      • 3.2 安装RabbitMQ服务端
      • 3.3 测试安装效果
    • 四、源码解析
      • 4.1 集成与配置
        • 4.1.1 导入依赖
        • 4.1.2 添加配置
        • 4.1.3 创建用户,密码,绑定角色(在命令行下)
        • 4.1.4 创建用户,密码,绑定角色(在web界面管理工具下)
        • 4.1.5 拓展
      • 4.2 深入浅出
        • 4.2.1 六种消息模式介绍
        • 4.2.2 简单工作队列模式
        • 4.2.3 工作队列模式
        • 4.2.4 发布订阅模式
        • 4.2.5 路由模式
        • 4.2.5 主题模式
    • 五、总结

一、mall开源项目

1.1 来源

mall学习教程,架构、业务、技术要点全方位解析。mall项目(50k+star)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。

项目github地址: github.com

1.2 项目转移

可以把github上的项目转移到gitee上,方便克隆到idea。

具体步骤如下:

在这里插入图片描述

1.3 项目克隆

由于github部署在国外,虽然idea也支持从github上拉取,但是克隆速度太慢,所以才推荐上述导入gitee后在克隆项目到idea。

具体的克隆步骤过于简单和常规化,读者可自行完成,或百度一下~

二、RabbitMQ 消息中间件

RabbitMQ 消息的传递:是由『 生产者 -> 交换机 -> 队列 -> 消费者 』这么一个模式,只不过点对点模式和工作队列模式我们可以理解成是一个匿名的交换机进行投递队列。

2.1 rabbit简介

RabbitMQ 官网:官网

RabbitMQ是一个消息代理 - 一个消息系统的媒介。它可以为你的应用提供一个通用的消息发送和接收平台,并且保证消息在传输过程中的安全。

RabbitMQ是一款使用Erlang语言开发的,实现AMQP(高级消息队列协议)的开源消息中间件。首先要知道一些RabbitMQ的特点如下:

  • 可靠性。支持持久化,传输确认,发布确认等保证了MQ的可靠性。
  • 灵活的分发消息策略。这应该是RabbitMQ的一大特点。在消息进入MQ前由Exchange(交换机)进行路由消息。分发消息策略有:简单模式、工作队列模式、发布订阅模式、路由模式、通配符模式。
  • 支持集群。多台RabbitMQ服务器可以组成一个集群,形成一个逻辑Broker。
  • 多种协议。RabbitMQ支持多种消息队列协议,比如 STOMP、MQTT 等等。
  • 支持多种语言客户端。RabbitMQ几乎支持所有常用编程语言,包括 Java、.NET、Ruby 等等。
  • 可视化管理界面。RabbitMQ提供了一个易用的用户界面,使得用户可以监控和管理消息 Broker。
  • 插件机制。RabbitMQ提供了许多插件,可以通过插件进行扩展,也可以编写自己的插件。

rabbit开发文档地址: [java客户端开发文档]( Java客户端指南 · RabbitMQ in Chinese (mr-ping.com) )

2.2 分布式后端项目的使用流程

下图是结合项目经历,外加百度查找资料,自行总结的基本使用流程。

rabbitmq的使用流程图如下:

在这里插入图片描述

2.3 分布式后端项目的使用场景

下图是结合项目经历,外加百度查找资料,自行总结的基本使用场景。

rabbitmq的使用场景图如下:

在这里插入图片描述

三、安装RabbitMQ(Win10)

由于以前都是在Linux上操作rabbitmq( 一般用Docker拉一个RabbitMQ的镜像下来,省去环境的部署 ),现在解读源码,尝试一下在win10下操作,需要先有环境, 首先先下载Erlang ,再下载RabbitMQ服务端

psRabbitMQErlang是紧密相关的,因此在选择RabbitMQ版本时,需要确保它与您安装的特定Erlang版本兼容。

Erlang/OTP 26.0.2与之兼容版本是RabbitMQ 3.8.x 或者 更高

❌写到后面我憨住了,早知道不选这么高的版本了

经过:安装好两个版本后,忘记看项目中 spring-boot-starter-amqp版本为2.1.3作为RabbitMQ客户端库,结果版本不兼容,导致一直连不上,网上百度一堆问题,我都仔细刷选过了,都是正确的。后面只能把问题定位到版本不兼容上了,然后说退而求其次,去升级spring-boot-starter-amqp版本为2.3.x就可以完美解决,没想到的是…

阿里云仓库太坑了,居然没有。。。

Could not find artifact org.springframework.boot:spring-boot-starter-amqp:pom:2.3.3 in alimaven

然后百度找了许多教程,说改范围的还有换镜像的,结果都试了一下,结果这个找不到就算了,其它的依赖也全报错,应该是仓库的依赖冲突啥的,就不深究了。。。

✒️还是跟着项目走,将 ErlangRabbitMQ服务端版本降下来。

spring-boot-starter-amqp的版本为2.1.3 是与 RabbitMQ 3.7.x 版本兼容的版本

这里下载RabbitMQ服务端:rabbitmq-server-3.7.3.exe

对应的Erlang 版本在19.3 - 20.x记住一定要卸载干净,版本一定要兼容,不然安装插件会报版本不兼容的错误

下面截图就不更新了,没啥必要,只是版本号不同,操作几乎大同小异。(最终是连接上了,确实是版本不兼容的问题,真是各处坑都踩完……)

3.1安装erLang语言,配置环境变量

1、先到官网下载,Erlang官网:官网(下载win10版)

在这里插入图片描述

2、下载完成为otp_win64_26.0.exe,接着双击安装,一直点next就行了(可以切换安装路径),安装完之后,配置环境变量。

在这里插入图片描述

3、 环境变量配置完毕,使用cmd命令,输入erl -version验证是否成功。

成功截图类似下图:

在这里插入图片描述

3.2 安装RabbitMQ服务端

1、在RabbitMQ的github上下载window版本的服务端安装包。

下载地址:Release RabbitMQ 3.8.32 · rabbitmq/rabbitmq-server (github.com) )
在这里插入图片描述

2、下载为rabbitmq_server-3.8.32.exe,接着到双击安装,一直点下一步安装即可(可以切换安装路径),安装完成后,找到安装目录下\rabbitmq\rabbitmq_server-3.8.32\sbin 打开cmd命令,输入rabbitmq-plugins enable rabbitmq_management命令安装管理页面的插件。

在这里插入图片描述

3、 双击rabbitmq-server.bat启动脚本,然后打开服务管理可以看到RabbitMQs是否正在运行。(降低版本后,没有注册到服务上,需要启动脚本,不要关闭命令行窗口,使得服务在其上跑着)

在这里插入图片描述

3.3 测试安装效果

1、 打开浏览器输入http://localhost:15672

账号密码默认是:guest/guest,成功效果:

在这里插入图片描述

2、安装成功,登录后的效果如下图。

在这里插入图片描述

四、源码解析

看源码自我总结出来的看新项目时的基本步骤,首先先看集成和配置,在从业务的角度来分析,结合集成的框架和组件,来依次剥削系统的架构。

**解析内容:**下方的解析内容大部分在图中解释,外面就不做过多的阐述。

4.1 集成与配置

直接拿源码分析,只分析与rabbitmq有关的部分,其它部分读者请,自行看源码分析。

**项目启动:**只需要启动mall-tiny-rabbit模块的部分即可。

**启动所需:**启动RabbitMQ的服务(前面有安装win10版)

4.1.1 导入依赖

pom文件中导入rabbitmq的相关依赖spring-boot-starter-amqp(rabbitmq集成进springboot)。

在这里插入图片描述

4.1.2 添加配置

application.yml中添加rabbitmq的相关配置。

在这里插入图片描述

4.1.3 创建用户,密码,绑定角色(在命令行下)

rabbitmq的用户管理包括增加用户,删除用户,查看用户列表,修改用户密码。

1、 查看已有用户及用户的角色:

rabbitmqctl.bat list_users

在这里插入图片描述

2、 新增一个用户:

// rabbitmqctl.bat add_user username password
rabbitmqctl.bat add_user mall mall

在这里插入图片描述

3、删除一个用户:

// 注意观察查询、添加、删除都是只换前缀,更新亦然,就不列举了
rabbitmqctl.bat delete_user mall

4、绑定角色:

rabbitmqctl.bat set_user_tags mall administrator

在这里插入图片描述

4.1.4 创建用户,密码,绑定角色(在web界面管理工具下)

1、介绍web界面管理工具页

在这里插入图片描述

2、 添加用户和给予角色

在这里插入图片描述

3、由于yml文件中配置有virtual-host: /mall, 添加Virtual Hosts(可以理解成一个数据库,类似于mysql、oracle之类的)

在这里插入图片描述

4.1.5 拓展

rabbitmq用户角色可分为五类:超级管理员, 监控者, 策略制定者, 普通管理者以及其他。

(1) 超级管理员(administrator)

可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。

(2) 监控者(monitoring)

可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)

(3) 策略制定者(policymaker)

可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。

(4) 普通管理者(management)

仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。

(5) 其他的

无法登陆管理控制台,通常就是普通的生产者和消费者。

4.2 深入浅出

4.2.1 六种消息模式介绍

六种消息模式的官网:RabbitMQ Tutorials — RabbitMQ

  1. Simple Work Queue(简单工作队列):也就是常说的点对点模式,一条消息由一个消费者进行消费。(当有多个消费者时,默认使用轮训机制把消息分配给消费者)。
  2. Work Queues (工作队列):也叫公平队列,能者多劳的消息队列模型。队列必须接收到来自消费者的 手动ack 才可以继续往消费者发送消息。
  3. Publish/Subscribe (发布订阅模式):一条消息被多个消费者消费。
  4. Routing(路由模式):有选择的接收消息。
  5. Topics(主题模式):通过一定的规则来选择性的接收消息。
  6. RPC 模式:发布者发布消息,并且通过 RPC 方式等待结果。(使用场景少,在源码中没有,想了解的可以去官网了解)

ps:官网最后有一个 Publisher Confirms消息确认机制。指的是生产者如何发送可靠的消息。

4.2.2 简单工作队列模式

一条消息由一个消费者进行消费 (当有多个消费者时,默认使用轮训机制把消息分配给消费者)

1、 配置类

配置 RabbitMQ 的 Spring 配置类 SimpleRabbitConfig,其中创建了一个消息队列对象、一个发送消息的对象(SimpleSender),以及一个接收消息的对象(SimpleReceiver)。这些对象都将由 Spring 框架进行管理和注入。

在这里插入图片描述

2、消息发送者

在这里插入图片描述

3、消息消费者

在这里插入图片描述

4、简单工作队列模式的控制层接口

在这里插入图片描述

5、swagger发送效果

swagger无法启动的,请参考我上一篇博文: mall:redis项目源码解析_忆~遂愿的博客-CSDN博客

在这里插入图片描述

6、rabbitmq服务端的界面显示效果

在这里插入图片描述

7、idea控制台打印的日志信息

在这里插入图片描述

4.2.3 工作队列模式

公平队列,能者多劳的消息队列模型。队列必须接收到来自消费者的 手动ack 才可以继续往消费者发送消息。(模拟消费)

1、 定义了一些消息队列以及相应的消息接收器和发送器

在这里插入图片描述

2、消息发送者

在这里插入图片描述

3、消息消费者

在这里插入图片描述

4、工作队列模式的控制层接口

在这里插入图片描述

5、idea控制台打印的日志信息

在这里插入图片描述

4.2.4 发布订阅模式

一条消息被多个消费者消费。

1、配置类

在这里插入图片描述

2、消息发送者

在这里插入图片描述

3、消息消费者

在这里插入图片描述

4、发布/订阅模式的控制层接口

在这里插入图片描述

5、rabbitmq服务端的界面显示效果

在这里插入图片描述

6、idea控制台打印的日志信息

在这里插入图片描述

4.2.5 路由模式

有选择的接收消息。

1、配置类

通过配置不同的绑定键,可以将不同的队列绑定到同一个交换机上,以实现消息的路由和分发。

在这里插入图片描述

2、消息发送者

在这里插入图片描述

3、消息消费者

在这里插入图片描述

4、路由模式的控制层接口

在这里插入图片描述

5、idea控制台打印的日志信息

在这里插入图片描述

4.2.5 主题模式

通过一定的规则来选择性的接收消息。

1、配置类

在这里插入图片描述

2、消息发送者

在这里插入图片描述

3、消息消费者

在这里插入图片描述

4、路由模式的控制层接口

在这里插入图片描述

5、idea控制台打印的日志信息

在这里插入图片描述

五、总结

本文是有我先从实际项目中获取需求,从而对RabbitMQ消息队列的学习,结合源码来学习,从mall开源项目中学习RabbitMQ,感觉收获颇深,希望这篇文章对你们也会有所帮助。

后续我也会结合该框架学习一下其他的技术栈。

盈若安好,便是晴天

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/62561.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源微服务如何选型?Spring Cloud、Dubbo、gRPC、Istio 详细对比

作者:刘军 不论您是一名开发者、架构师、CTO, 如果您曾深度参与在微服务开发中,那么相信您一定有过开源微服务框架或体系选型的疑问:Apache Dubbo、Spring Cloud、gRPC 以及 Service Mesh 体系产品如 Istio,到底应该选…

Linux 虚拟机同步时间crontab以及crond详解

目录 一 Linux 虚拟机同步时间设置 1. 检查是否安装cron服务(即时间同步器) 2. 下载时间同步器 3. 编辑crontab 内容 4. 同步更新电脑网络时间 5.设置 reload 6. 查看 crond 状态 二 crond 详解 1. 启动/关闭cron服务 2. crontab命令格式 3. …

ShardingSphere——柔性事务SEATA原理

摘要 Apache ShardingSphere集成了 SEATA 作为柔性事务的使用方案,本文主要介绍其实现ShardingSphere中柔性事务SEATA原理原理。帮助你更好的理解ShardingSphere原理。同时帮助大家更好的使用柔性事务SEATA原理。 一、Seata柔性事务 Apache ShardingSphere 集成了…

说说广播流与普通流

分析&回答 user actions 可以看作是事件流(普通流)patterns 为广播流,把全量数据加载到不同的计算节点。 广播流 Broadcast是一份存储在TaskManager内存中的只读的缓存数据在执行job的过程中需要反复使用的数据,为了达到数据共享&am…

Windows系统中Apache Http服务器简单使用

1 简介 Apache HTTP服务器是一个开源的、跨平台的Web服务器软件。它由Apache软件基金会开发和维护。Apache HTTP服务器可以在多种操作系统上运行,如Windows、Linux、Unix等,并且支持多种编程语言和技术,如PHP、Perl、Python、Java等。…

Unity ShaderGraph教程——基础shader

1.基本贴图shader: 基础贴图实现:主贴图、自发光贴图、光滑度贴图、自发光贴图(自发光还加入了颜色影响和按 钮开关). 步骤:最左侧操作组——新建texture2D——新建sample texture 2D承…

React 生命周期新旧对比

前言 React16.4版本之后使用了新的生命周期,它使用了一些新的生命周期钩子(getDerivedStateFromProps、getSnapshotBeforeUpdate),并且即将废弃老版的3个生命周期钩子(componentWillMount、componentWillReceiveProps…

WebGPU加载Wavefront .OBJ模型文件

在开发布料模拟之前,我想使用 WebGPU 开发强大的代码基础。 这就是为什么我想从 Wavefront .OBJ 文件加载器开始渲染 3D 模型。 这样,我们可以快速渲染 3D 模型,并构建一个简单而强大的渲染引擎来完成此任务。 一旦我们有了扎实的基础&#x…

我们把“高血压”小游戏真正做到了不用下载,点击即玩!!!

相信大家经常在短视频网站上刷到各种“高血压“小游戏吧,当你按捺不住点击,却发现手机上多了一大堆“流氓软件”的时候,血压就更高了。 但是! 今天! 我们把“虚假广告”做成了真实的游戏,并且可以轻松部署到…

【openEuler创新项目探索】一个Java端的向量化BLAS库VectorBLAS

VectorBLAS简介 VectorBLAS是一个使用Java语言实现的向量化BLAS高性能库,目前已在openEuler社区开源。 VectorBLAS通过循环展开、矩阵分块和内存布局优化等算法优化,对BLAS函数进行了深度优化,并利用VectorAPI JDK提供的多种向量化API实现。…

利用Jmeter做接口测试(功能测试)全流程分析

利用Jmeter做接口测试怎么做呢?过程真的是超级简单。 明白了原理以后,把零碎的知识点填充进去就可以了。所以在学习的过程中,不管学什么,我一直都强调的是要循序渐进,和明白原理和逻辑。这篇文章就来介绍一下如何利用…

开源vue动态表单组件

一、项目简介 vueelement的动态表单组件,拖拽组件到面板即可实现一个表单 二、实现功能 支持拖拽 支持输入框 支持文本框 支持数字输入框 支持下拉选择器 支持多选框 支持日期控件 支持开关 支持动态表格 支持上传图片 支持上传文件 支持标签 支持ht…

vue中实现echarts三维散点图

需要安装 echarts 同时引入 echarts-gl 我安装的版本: "echarts": "^5.3.2", "echarts-gl": "^2.0.9", import Vue from "vue"; import * as echarts from "echarts"; Vue.prototype.$echarts echa…

常用Web漏洞扫描工具汇总(持续更新中)

常用Web漏洞扫描工具汇总 常用Web漏洞扫描工具汇总1、AWVS,2、OWASP Zed(ZAP),3、Nikto,4、BurpSuite,5、Nessus,6、nmap7、X-ray还有很多不是非常知名,但可能也很大牌、也较常见的。…

生成对抗网络(GAN):在图像生成和修复中的应用

文章目录 什么是生成对抗网络(GAN)?GAN在图像生成中的应用图像生成风格迁移 GAN在图像修复中的应用图像修复 拓展应用领域总结 🎉欢迎来到AIGC人工智能专栏~生成对抗网络(GAN):在图像生成和修复…

Visual Studio Code 终端配置使用 MySQL

Visual Studio Code 终端配置使用 MySQL 找到 MySQL 的 bin 目录 在导航栏中搜索–》服务 找到MySQL–>双击 在终端切换上面找到的bin目录下输入指令 终端为Git Bash 输入命令 ./mysql -u root -p 接着输入密码,成功在终端使用 MySQL 数据库。

Annual Inspection

机动车年检流程【交警12123】APP 到【检查地方】门口墙上贴着 然后上缴钥匙,等待,本次等待不到半小时搞定,速度很满意, 发现检测人员把你的里程数纠正了。 给你的行驶证,打印这些字样:检验有效期至XXXX 再给…

ChatGPT帮助高职院校学生实现个性化自适应学习与对话式学习

一、学习层面:ChatGPT帮助高职院校学生实现个性化自适应学习与对话式学习 1.帮助高职院校学生实现个性化自适应学习 数字技术的飞速发展引起了教育界和学术界对高职院校学生个性化自适应学习的更多关注和支持,其运作机制依赖于人工智能等技术&#xff0…

SLAM从入门到精通(开始篇)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 很多同学喜欢学习linux,但是他们只是把linux当成是一个嵌入式技术在学习,而不是当成工具在使用。平时,要么是自…

Samba服务器

目录 一、什么是Samba? 二、Samba进程 三、Samba主要功能 四、Samba工作流程 五、Samba安全级别 六、Sam主配置文件/etc/samba/smb.conf 七、Samba服务配置案例 一、什么是Samba? Samba可以让linux计算机和windows计算机之间实现文件和打印机资源共享的一…