RabbitMQ下载安装及尚硅谷学习笔记(看这一篇就够了!)

1、RabbitMQ入门流程图

在这里插入图片描述

1.1、什么是消息队列

消息指的是两个应用间传递的数据。数据的类型有很多种形式,可能只包含文本字符串,也可能包含嵌入对象。

消息队列(Message Queue)”是在消息的传输过程中保存消息的容器。在消息队列中,通常有生产者和消费者两个角色。生产者只负责发送数据到消息队列,谁从消息队列中取出数据处理,他不管。消费者只负责从消息队列中取出数据处理,他不管这是谁发送的数据。
在这里插入图片描述

1.2为什么使用消息队列

主要有三个作用:

  • 解耦。如图所示。假设有系统B、C、D都需要系统A的数据,于是系统A调用三个方法发送数据到B、C、D。这时,系统D不需要了,那就需要在系统A把相关的代码删掉。假设这时有个新的系统E需要数据,这时系统A又要增加调用系统E的代码。为了降低这种强耦合,就可以使用MQ,系统A只需要把数据发送到MQ,其他系统如果需要数据,则从MQ中获取即可。
    在这里插入图片描述
  • 异步。如图所示。一个客户端请求发送进来,系统A会调用系统B、C、D三个系统,同步请求的话,响应时间就是系统A、B、C、D的总和,也就是800ms。如果使用MQ,系统A发送数据到MQ,然后就可以返回响应给客户端,不需要再等待系统B、C、D的响应,可以大大地提高性能。对于一些非必要的业务,比如发送短信,发送邮件等等,就可以采用MQ。
    在这里插入图片描述
  • 削峰。如图所示。这其实是MQ一个很重要的应用。假设系统A在某一段时间请求数暴增,有5000个请求发送过来,系统A这时就会发送5000条SQL进入MySQL进行执行,MySQL对于如此庞大的请求当然处理不过来,MySQL就会崩溃,导致系统瘫痪。如果使用MQ,系统A不再是直接发送SQL到数据库,而是把数据发送到MQ,MQ短时间积压数据是可以接受的,然后由消费者每次拉取2000条进行处理,防止在请求峰值时期大量的请求直接发送到MySQL导致系统崩溃。
    在这里插入图片描述

2、RabbitMQ特点

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

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

3、RabbitMQ下载安装

这里我采用的是Linux环境下安装:
CentOS7.9,erlang-22.3-1.el7.x86_64.rpm,rabbitmq-server-3.8.8-1.el7.noarch.rpm。
官网下载太慢了,这里我直接把rpm包给粘出来,大家可以去我的网盘上下载。
链接:https://pan.baidu.com/s/1UiQyYu7ZaJouXsVToFvGIA
提取码:wmlg

3.1、进入centos虚拟机中,进入opt文件夹中上传刚才下载的两个npm包

在这里插入图片描述

3.2、进入opt目录 cd /opt,安装erlang以及rabbitmq,按顺序执行下面命令。

rpm -ivh erlang-22.3-1.el7.x86_64.rpm
yum install socat -y
rpm -ivh rabbitmq-server-3.8.8-1.el7.noarch.rpm

设置下次开机自动开启rabbitmq服务

chkconfig rabbitmq-server on

3.3、之后就可以启动rabbitmq命令,可以查看其的状态

/sbin/service rabbitmq-server start
/sbin/service rabbitmq-server status

到这里我们需要关闭刚刚开启的服务。

 /sbin/service rabbitmq-server stop

3.4、开启rabbitmq图形化管理界面

rabbitmq-plugins enable rabbitmq_management

如果遇到如下问题,在创建虚拟机安装centos的时候,我们对自己的网络IP和主机名进行了设置,因此不再是默认。
在这里插入图片描述
我们需要通过hostname查看当前会话的主机名,另一种方式,通过hostnamectl status查看静态主机

在这里插入图片描述
修改hosts文件

vi /etc/hosts

在这里插入图片描述

3.5、重启rabbitmq服务,然后就可以访问了,ip地址加上默认端口号;

第一次访问发现访问不了,问题是你没有关防火墙;

关闭防火墙

systemctl stop firewalld

之后就发现可以访问了!默认username=guest,password=guest。
在这里插入图片描述
登录还是登录不了滴!这时我们需要创建一个新用户,并把该用户赋予超级管理员的权限。
按照命令顺序执行

rabbitmqctl list_users  //查看用户列表
rabbitmqctl add_user gyf 20020702  //设置一个新用户
rabbitmqctl set_user_tags gyf administrator  //设置超级管理员
rabbitmqctl set_permissions -p "/" gyf ".*" ".*" ".*"  //设置所有读写删改的权限

3.6、用自己设置的用户名密码进行登录,就可以啦!

在这里插入图片描述

4、学习笔记(尚硅谷)

学习笔记太多啦!给小伙伴们放到百度网盘上了,要需要的小伙伴可以自行获取。
链接: https://pan.baidu.com/s/1BdzfPiGEFW0ttMOjXZleSg
提取码: 756m

5、总结

延时队列在需要延时处理的场景下非常有用,使用 RabbitMQ 来实现延时队列可以很好的利用RabbitMQ 的特性,如:消息可靠发送、消息可靠投递、死信队列来保障消息至少被消费一次以及未被正确处理的消息不会被丢弃。另外,通过 RabbitMQ 集群的特性,可以很好的解决单点故障问题,不会因为单个节点挂掉导致延时队列不可用或者消息丢失。

当然,延时队列还有很多其它选择,比如利用 Java 的 DelayQueue,利用 Redis 的 zset,利用 Quartz或者利用 kafka 的时间轮,这些方式各有特点,看需要适用的场景。
加油!程序猿

猜你喜欢

转载自blog.csdn.net/lj20020302/article/details/130088599