RabbitMQ之呕心沥血的总结(图文并茂、万字级别、毕生所学)


学习一门中间件技术之前当然要对其进行了解,心中要有相关疑问,带着问题去学习一门技术,才能把握其重点。从一个问题的引入,慢慢向深层次靠拢。


比如:看到消息中间件这个词,应该想到的是消息中间件是什么?
然后就去了解消息中间件;之后可能又会有疑问,为什么要引入消息中间件呢?心中无疑问时,或许你已经了解的差不多了
带着疑问去学习,更能把握技术主干。

一、消息中间件的相关问题


1、消息中间件是什么?

消息中间件是利用高效可靠的消息传递机制进行异步的数据传输,并基于数据通信进行分布式系统的集成。通过提供消息队列模型和消息传递机制,可以在分布式环境下扩展进程间的通信。

看到官方提供的术语,可能难以理解;可以通过概念中的异步分析,了解消息中间件。有异步当然就有同步这个概念。

消息中间件负责消息的传递、存储、分发,数据的存储和分发要遵循某种规范(为了不同语言可以进行交互)

1.1、同步详解

平常我们在做项目时,为了完成业务需求,我们可能需要不同系统间调用接口。

在这里插入图片描述
用户发起请求给系统A,系统A接到请求直接调用系统B,系统B返回结果后,系统A才能返回结果给用户,这种模式就是同步调用。

从这你就可以看出,同步调用时,系统之间相互依赖;用户发起请求,相关的系统都要跟着运行,如果一个系统出现了问题,那么整个就over了。

1.2、异步详解

想必都了解异步是什么意思,发送方和接收方谁也不知道谁;比如发送方只管我发消息了,也不管有没有接收。相对来说就是相互透明的。(在软件开发中,透明是看不到的意思)

在这里插入图片描述
从这张图我可以看出,生产者不断发送消息到消息队列;消费者不断从队列获取消息,所以生产者只关心消息的发送,消费者只关心获取消息;轻松实现系统间解耦。

通过异步可以轻松理解消息中间件的实现机制。
简单了说消息中间件是一个独立部署的系统,可以实现系统之间的异步调用。

2、为什么要使用消息中间件?


2.1、消息中间件的优点

异步提升性能、降低耦合度、流量削峰

2.2、异步提升性能分析

在这里插入图片描述

可以看出不使用消息中间件一共耗时20ms,这样的串行执行处于一种阻塞状态,意思是某个系统没有执行完是不会返回结果的。

如果引入消息中间件之后呢?
在这里插入图片描述

一共耗时100ms,异步执行处于非阻塞状态,即便某个系统需要执行很久,不过不会影响其他系统的执行。

2.3、降低耦合度分析

在这里插入图片描述

可以看出如果不使用消息中间件,一旦B系统出现了问题,那么层层结果返回,用户收到的就是一个异常,然后就需要等着系统修复

在这里插入图片描述

使用了消息中间件之后,A系统发送消息到消息中间件之后就会直接返回结果;B系统被工程师修复好之后,重新获取消息执行未执行的操作就行了。系统之间相互分离,耦合度大大降低。

2.4、流量削峰

在这里插入图片描述
如上图,如果系统B最高以4000QPS的速度查询数据库,当系统A中的QPS超过一万时,此时超过了系统A的最大限值,此时请求全部打到了系统B,此时B是最高以4000QPS的速度查询数据库,所以数据库就会崩溃。

在这里插入图片描述
如果使用了消息中间件,系统A的全部请求会累积到消息中间件中,然后系统B根据自己的需求每次从消息中间件中读取多少请求。

使用消息中间件可以屏蔽不同语言的差异性(简单了说就是语言之间可以相互通讯,使用消息中间件屏蔽了具体的实现细节)

3、协议精讲

消息中间件一般负责数据的传递、存储、分发三个部分;
然后问题来了,假设两个系统A系统和B系统,采用了不同的语言进行实现;那么怎么进行消息传递呢?所以说消息中间件需要遵循某种协议。

另外这个协议一般来说是比较简单的协议,比如AMQP、Kalfka等
注:不适用http协议,这个协议比较复杂,包含了状态码、响应码、数据加密解密等

4、消息中间件技术选型

1、ActiveMQ:老牌的Apache产品,完全支持JMS规范(JMS定义了Java API层面的标准)
2、Kafka:大数据领域的产品,基于TCP/IP二进制协议,速度非常快,但不支持事务,消息可能丢失、重复、错误。
3、RocketMQ:阿里巴巴出品,性能很高,但事务方面没有开源。
4、RabbitMQ:使用Erlang语言开发的消息队列系统,基于AMQP协议实现,AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。


在这里插入图片描述

作为稳定、流行、开源等综合性最强的RabbitMQ当然要受到鄙人的关注了

二、RabbitMQ安装

我用的是阿里云服务器(我绝对不是打广告的哈😀)
远程连接工具用的是Xshell,还有文件传输工具Xftp
在这里插入图片描述

2.1、Erlang的下载安装

1.下载Erlang的JDK(因为RabbitMQ是使用erlang语言编写的)

wget https://packages.erlang-solutions.com/erlang-solutions-2.0-1.noarch.rpm
在这里插入图片描述

2、解压Erlang压缩包

rpm -Uvh erlang-solution-2.0.1.noarch.rpm
在这里插入图片描述

3、安装Erlang

yum install -y erlang
在这里插入图片描述

4、查Erlang是否安装成功

erl -v
在这里插入图片描述



2.2、RabbitMQ的下载安装

1、安装RabbitMQ依赖的插件socat

yum install -y socat
在这里插入图片描述

2、下载RabbitMQ

查看系统版本

lsb_release -a
在这里插入图片描述

去官网下载查询版本

https://www.rabbitmq.com/download.html
在这里插入图片描述
右键RHEL/Centos 8.x --》复制连接地址

下载RabbitMQ

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14-1.el8.noarch.rpm

3、安装RabbitMQ

解压RabbitMQ压缩包
在这里插入图片描述
安装RabbitMQ

yum install rabbitmq-server -y
在这里插入图片描述



2.3、查看RabbitMQ是否安装成功

1、启动服务

systemctl start rabbitmq-server

2、查看rabbitmq的状态

systemctl status rabbitmq-server
在这里插入图片描述
出现这个就说明安装成功了。




三、安装RabbitMQ的web客户端

1、安装

1.1、输入

rabbitmq-plugins enable rabbitmq_management
在这里插入图片描述

1.2、重启服务

systemctl restart rabbitmq-server在这里插入图片描述

1.3、浏览器访问http://你的ip地址:15672

注意云服务器一定要在安全组中开放15672端口

在这里插入图片描述
1.3.1、如果是本地服务器

username:guest
password:guest

1.3.2、如果是远程服务器需要进行授权

1.3.2.1、新增用户

rabbitmqctl add_user root root
在这里插入图片描述

1.3.2.2、设置用户权限

rabbitmqctl set_user_tags root administrator
在这里插入图片描述

下面的权限是借鉴的网友

management
用户可以通过AMQP做的任何事外加:
列出自己可以通过AMQP登入的virtual hosts
查看自己的virtual hosts中的queues, exchanges 和 bindings
查看和关闭自己的channels 和 connections
查看有关自己的virtual hosts的“全局”的统计信息,包含其他用户在这些virtual hosts中的活动。

policymaker
management可以做的任何事外加:
查看、创建和删除自己的virtual hosts所属的policies和parameters

monitoring
management可以做的任何事外加:
列出所有virtual hosts,包括他们不能登录的virtual hosts
查看其他用户的connections和channels
查看节点级别的数据如clustering和memory使用情况
查看真正的关于所有virtual hosts的全局的统计信息

administrator
policymaker和monitoring可以做的任何事外加:
创建和删除virtual hosts
查看、创建和删除users
查看创建和删除permissions
关闭其他用户的connection

1.3.3、输入username:root,password:root登录控制台
在这里插入图片描述



2、权限指令总结

1、rabbitmqctl add_user 账号 密码 添加用户

2、rabbitmqctl set_user_tags 账号 权限 赋予权限

3、rabbitmqctl change_password Username Newpassword 修改密码

4、rabbitmqctl delete_user Username 删除用户

5、rabbitmqctl list_user 查看所有用户

6、rabbitmqctl set_permissions -p / Username “.* " ". " ". *” 设置用户为administrator角色

四、Docker安装RabbitMQ

1、Docker的安装

1、更新yum包

yum update

2、安装软件包yum-util(提供yum-config-manager功能),还有device-mapper的依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

3、设置docker仓库为阿里云

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、安装docker

yum install docker-ce -y

5、查看docker 版本

docker -v

6、配置加速镜像

vim /etc/docker/daemon.json

修改为如下内容

{
“registry-mirrors”: [“https://registry.docker-cn.com”]
}
systemctl restart docker.service

重启docker即可

sudo systemctl restart docker

本地Centos7安装docker步骤:https://blog.csdn.net/Kevinnsm/article/details/111409921

2、Docker安装RabbitMQ

下载rabbitmq

docker pull rabbitmq

启动rabbitmq

docker run -d --hostname my-rabbit --name myrabbit -p 15672:15672 -p 5672:5672 rabbitmq

–hostname:指定容器主机名称
–name:指定容器名称
-p :端口映射(docker内部端口和外网端口)

查看镜像ID

docker ps

安装rabbitmq客户端

docker exec -it 镜像ID /bin/bash //进入容器内部

rabbitmq-plugins enable rabbitmq_management

待写…

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Thecoastlines

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值