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.rhkb.cn/news/114097.html

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

相关文章

海康机器人工业相机SDK MVS安装教程

文章目录 一. 海康机器人介绍二. 工业相机客户端安装教程 一. 海康机器人介绍 海康机器人是面向全球的机器视觉和移动机器人产品及解决方案提供商,业务聚焦于工业物联网、智慧物流和智能制造,构建开放合作生态,为工业和物流领域用户提供服务…

美国纽约10日游

一、前言 我有两周断更了,原因是去纽约只顾着玩,没时间写,今天有时间正好和大家分享一下去纽约的攻略 二、以下是一个10天去美国纽约旅游的攻略,十万以内,包括机票、酒店、交通、餐饮和景点门票等费用: 第…

js、PHP连接外卖小票机打印机方案(调用佳博、芯烨等)

前言: 目前开发需要用到电脑直接连接外卖小票机打印小票,查阅各种资料,使用 6612345浏览器 终于解决了这个问题。 效果: PHP、js直接连接小票机并且自动出票。 支持的小票机: 目前测试可以的有:电脑A4打印…

学乐多光屏 P90:打开儿童学习新视界

随着科技迅猛发展,儿童教育正在迎来一场前所未有的革命。在这个数字化时代的浪潮中,学乐多光屏P90凭借其卓越的特性和深远的教育理念,成为智能儿童学习领域的引领者,为孩子们创造了崭新的学习体验。 创新科技,引领学习…

亚马逊云科技GenAI菁英创造营,致力于大模型时代高校AI人才培养

大语言模型(LLM)产业的蓬勃发展将改变数字产业生态,助力AI工业化进程、变革海量应用交互方式、创造数字产业新的增长空间。 “GenAI Talent Program”由亚马逊云科技特别打造,该计划致力于大模型时代高校AI人才培养,通…

dubbo项目traceId链路传递(MDC方案及重复traceId处理)

1.traceId用途 主要用于项目dubbo接口调用链日志追踪使用,可以获取完整的链路日志,协助排查问题。 2.traceId传递及代码实现 本方案是基于 org.slf4j.MDC 进行实现,会出现线程池中线程复用导致traceId重复问题,后面会说解决方案。…

头歌MYSQL——课后作业1 数据库和数据表的建立、修改和删除

第1关:建立数据库 任务描述 本关任务:建立数据库 为了完成本关任务,你需要掌握: 如何创建数据库,显示已经建立的数据库 相关知识 创建数据库 创建数据库是在系统磁盘上划分一块区域用于数据的存储和管理。 命令格…

应用TortoiseSVN的SubWCRev管理VisualStudio C#项目编译版本号

首先要安装 TortoiseSVN, 并确保TortoiseSVN的bin目录被加入到系统环境变量Path中。 1、拷贝Porperties目录下的文件AssemblyInfo.cs生成副本AssemblyInfo.template, 作为版本管理的模板文件。 2、修改模板文件中的想要管理的版本号信息 // [assembly: AssemblyVersion(&quo…

使用spring自带的发布订阅来实现发布订阅

背景 公司的项目以前代码里面有存在使用spring自带发布订阅的代码,因此稍微学习一下如何使用,并了解一下这种实现方式的优缺点。 优点 实现方便,代码方面基本只需要定义消息体和消费者,适用于小型应用程序。不依赖外部中间件&a…

(数字图像处理MATLAB+Python)第十一章图像描述与分析-第一节、二节:图像描述概述和特征点

文章目录 一:图像描述概述(1)图像描述(2)描述子 二:特征点(1)Moravec角点检测A:原理B:程序 (2)Harris角点检测A:原理B&…

尚硅谷宋红康MySQL笔记 14-18

是记录,不会太详细,受本人知识限制会有错误,会有个人的理解在里面 第14章 视图 了解一下,数据库的常见对象 对象描述表(TABLE)表是存储数据的逻辑单元,以行和列的形式存在,列就是字段,行就是记…

排序之插入排序

文章目录 前言一、直接插入排序1、基本思想2、直接插入排序的代码实现3、直接插入排序总结 二、希尔排序1、希尔排序基本思想2、希尔排序的代码实现3、希尔排序时间复杂度 前言 排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大…

【Vue】vue2预览显示quill富文本内容,vue-quill-editor回显页面,v-html回显富文本内容

文章目录 前言一、下载二、使用步骤1.引入样式2.html代码 总结 前言 提示:这里可以添加本文要记录的大概内容: vue后台框架,若依系统里有一个富文本编辑器,效果如下 在package.json里面查看,发现插件名叫quill 插件的…

基于食肉植物算法优化的BP神经网络(预测应用) - 附代码

基于食肉植物算法优化的BP神经网络(预测应用) - 附代码 文章目录 基于食肉植物算法优化的BP神经网络(预测应用) - 附代码1.数据介绍2.食肉植物优化BP神经网络2.1 BP神经网络参数设置2.2 食肉植物算法应用 4.测试结果:5…

【Leetcode】130.被围绕的区域

一、题目 1、题目描述 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O ,找到所有被 X 围绕的区域,并将这些区域里所有的 O 用 X 填充。 示例1: 输入:board = [[“X”,“X”,“X”,“X”],[“X”,“O”,“O”,“X”],[“X”,“X”,“O”,“X”],[“X”,“O”,“X”,“…

海外ios应用商店优化排名因素之视频预览与截图

当我们找到感兴趣的应用程序并转到该应用程序的页面时,首先引起注意的是预览视频。视频旨在以更具吸引力的方式展示应用程序的用户体验和UI。视频长度最多为30秒,其中前5秒最为重要,一定要让它尽可能引人注目。 1、关于优化预览视频的提示。…

【C语言】循环语句详解

✨个人主页: Anmia.🎉所属专栏: C Language 🎃操作环境: Visual Studio 2019 版本 目录 1.什么是循环结构? 2.while循环 while流程图 while语句中的break和continue break continue 3.for循环 for流…

进程Start

Linux中的命令解释器和Windows的程序管理器explorer.exe一样地位,都是在用户态下运行的进程 共享变量发生不同进程间的指令交错,就可能会数据出错 进程只作为除CPU之外系统资源的分配单位 CPU的分配单位是线程 每个进程都有自己的独立用户空间 内核空间是OS内核的…

PyCharm切换虚拟环境

PyCharm切换虚拟环境 为了满足不同任务需要不同版本的包,可以在Anaconda或者Miniconda创建多个虚拟环境文件夹,并在PyCharm下切换虚拟环境。 解决方案 1、打开Ananconda Prompt 2、创建自己的虚拟环境 格式:conda create -n 虚拟环境名字…

PSP - 蛋白质结构预测 OpenFold Multimer 模型训练参数与配置

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/132575709 OpenFold Multimer 是用于预测蛋白质多聚体结构的计算方法。基于OpenFold 的单体预测框架,利用深度学习技术,结…