RabbitMQ笔记(一)消息队列的介绍及Linux CentOS 8下安装最新版RabbitMQ

一、消息队列的相关概念

1.什么是MQ

MQ(message queue)消息队列,从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是message 而已,还是一种跨进程的通信机制,用于上下游传递消息。
在互联网架构中,MQ 是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。
使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。      

MQ是消息通信的模型 ,现在实现MQ的两种主流方式:AMQP和JMS

2.为什么要用MQ

  • 流量削峰

如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正
常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。使用消息队列做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。

  • 应用解耦

一个应用中有多个系统,用户创建订单后,如果耦合调用库存系统。支付系统等,如果此时任何一个系统出现故障,都会造成下单操作异常。如果转变成消息队列的方式,我们可以把故障系统要处理的东西缓存到消息队列中,让其他的系统先完成,当故障系统恢复后,从消息队列中获取要处理的东西,提升系统的可用性。
在这里插入图片描述

  • 异步处理

加入A服务调用B服务,此时B服务还没处理完成,需要A服务等待,这样的话会浪费很多的时间,效率不高,我们可以通过消息队列,当B服务完成时,通过消息队列发送给A服务一个消息(说我完成了,该你了),A服务再去调用B服务,在B服务没执行完的时间内,A服务可以做自己的事情。这便是异步处理。

在这里插入图片描述

3.AMQP和JMS的介绍

 JMS(java message service)由Sun公司早期提出的消息标准,
 是一个Java平台中关于面向消息中间件(MOM)的API,旨在为java应用提供统一的消息操作。

JMS提供了两种消息模型:

peer-2-peer(点对点) publish-subscribe(发布订阅)模型

   AMQP(advanced message queuing protocol)在2003年时被提出,最早用于解决金融领域不同平台之间的消息传递交互问题。
   AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议)。这是其和JMS的本质差别,
   AMQP不从API层进行限定,而是直接定义网络交换的数据格式。这使得实现了AMQP的provider天然性就是跨平台的。从这一点看,AQMP可以用http来进行类比,不关心实现的语言,只要大家都按照相应的数据格式去发送报文请求,不同语言的client均可以和不同语言的server链接。
   在AMQP中,消息路由(messagerouting)和JMS存在一些差别,在AMQP中增加了Exchange和binding的角色。producer将消息发送给Exchange,binding决定Exchange的消息应该发送到那个queue,而consumer直接从queue中消费消息。queue和exchange的bind由oconsumer来决定。

两者的各项数据对比:

类型 JMS AMQP
定义 Java api Wire-protocol
跨语言
跨平台
消息模型 提供两种消息模型:(1)Peer-2-Peer(2)Pub/sub 提供了五种消息模型:(1)、direct exchange(2)、fanout exchange(3)、topic change(4)、headers exchange(5)、system exchange
支持消息类型 多种消息类型:TextMessage、MapMessage、BytesMessage、StreamMessage、ObjectMessage、 Message (只有消息头和属性) byte[]当实际应用时,有复杂的消息,可以将消息序列化后发送。
相关的产品 ActiveMQ、RocketMQ RabbitMQ

4.RabbitMQ的介绍

 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现 
 RabbitMQ网站端口号:15672
 程序里面实现的端口为:5672

主流MQ的对比:

扫描二维码关注公众号,回复: 14642151 查看本文章
类型 ActiveMQ RabbitMQ RocketMQ Kafka
单机吞吐量 万级 万级 十万级 百万级TPS
时效性 ms级 微秒级 ms级 延迟在ms级以内
客户端支持语言 JAVA、C、C++、Python、PHP、Pert、net等 官方支持Erlang、Java/Ruby等,社区产出多种语言API,几乎支持所有常用语言 JAVA、C++(不成熟) 官方支持JAVA,开源社区有多语言版本,如PHP,Python,GO,C/C++,Ruby,NodeJS等编程语言
持久化 内存、文件、数据库 内存、文件,支持数据堆积,但数据堆积会影响生产速率 磁盘文件 磁盘文件,只要磁盘容量足够,可以做到无限消息堆积
可用性 高(基于主从架构) 高(基于主从架构) 非常高(分布式架构) 非常高(分布式架构)
消息可靠性 较低的概率丢失数据 较低的概率丢失数据 经过参数优化配置,消息可以做到0丢失 经过参数优化配置,消息可以做到0丢失
应用场景选择 官方社区现在对 ActiveMQ 5.x 维护越来越少,高吞吐量场景较少使用。 结合 erlang 语言本身的并发优势,性能好时效性微秒级,社区活跃度也比较高,管理界面用起来十分方便,如果你的数据量没有那么大,中小型公司优先选择功能比较完备的 RabbitMQ。 天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况。RoketMQ 在稳定性上可能更值得信赖,这些业务场景在阿里双 11 已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择 RocketMQ。 Kafka 主要特点是基于Pull 的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输,适合产生大量数据的互联网服务的数据收集业务。大型公司建议可以选用,如果有日志采集功能,肯定是首选 kafka 了。

二、RabbitMQ的安装

进入官网https://www.rabbitmq.com/
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

分析一下文件名:rabbitmq-server-3.10.7-1.el8.noarch.rpm

     rabbitmq的服务端版本是3.10.7
     el8 是Red Hat 8.x、CentOS 8.x 的下载
     *.noarch.rpm          可以在不同cpu上使用

gitHub上下载Erang编译的rpm包
下载地址:https://github.com/rabbitmq/erlang-rpm/releases
RabbitMQ的GitHUB下载地址:https://github.com/rabbitmq/rabbitmq-server/releases
在这里插入图片描述
下载成功之后,通过WinSCP软件将安装包发送至Linux中,
如果自己的Linux已经连接上网络了,就可以直接通过百度进行下载
在这里插入图片描述
将其安装在Linux的opt 目录下,查看是否上传成功
在这里插入图片描述
安装文件:rpm -ivh erlang-21.3-1.el7.x86_64.rpm
在这里插入图片描述
RabbitMQ依赖于Erlang、socat,因此要首先安装Erlang与socat
yum install socat -y
在这里插入图片描述
发现报错
原因是:

在2022年1月31日,CentOS团队终于从官方镜像中移除CentOS 8的所有包。

CentOS 8已于2021年12月31日寿终正非,但软件包仍在官方镜像上保留了一段时间。现在他们被转移到https://vault.centos.org

解决办法参考这个网站:https://blog.csdn.net/XZshijian/article/details/123042944

问题解决后,安装socat yum install socat -y
在这里插入图片描述
出现报错:
在这里插入图片描述

需要修改配置文件:按照上面的报错提示,将rabbitmq-server.conf配置文件中的 >/var/run/rabbitma 改为 /run/rabbitmq

在这里插入图片描述
重新进行安装:
在这里插入图片描述
默认安装到 、/usr/lib/rabbitmq/lib/
在这里插入图片描述
服务开启

在这里插入图片描述

查看服务状态
在这里插入图片描述
服务关闭

在这里插入图片描述

添加开机启动 RabbitMQ 服务
在这里插入图片描述
开启Web管理插件:
在这里插入图片描述
linux本地浏览器访问可视化界面:http://localhost:15672/

在这里插入图片描述
用默认账号密码(guest)登录发现也可以登录进去

在这里插入图片描述
通过主机ip却访问不到
在这里插入图片描述
windows访问显示访问时间超常
原因:Linux防火墙关闭
查看防火墙的状态:
在这里插入图片描述
关闭防火墙:systemctl stop firewalld.service
在这里插入图片描述
但是开机之后还是会自动启动防火墙
禁止firewalld开机启动:systemctl disable firewalld.service
在这里插入图片描述
此时windows可以通过ip访问rabbitmq
在这里插入图片描述
还是登录不了
原因:权限不够,通过添加一个新的用户增加权限
创建账号:rabbitmqctl add_user admin 123456
设置用户角色:rabbitmqctl set_user_tags admin administrator
此时可以登录进去,但当我们查看所有的用户时发现所创建的角色并没有访问虚拟空间的权利
在这里插入图片描述
用户 user_admin 具有/vhost1 这个 virtual host 中所有资源的配置、写、读权限

rabbitmqctl set_permissions -p “/” admin “." ".” “.*”
在这里插入图片描述
在这里插入图片描述

重置命令:
关闭应用的命令:rabbitmqctl stop_app
清除的命令: rabbitmqctl reset

注意:

1)使用此命令前,要先关闭应用(rabbitmqctl stop_app),否则不能清除

2) 这种方式不仅会清空消息,还会清空所有配置信息,需要谨慎使用

重新启动的命令:rabbitmqctl start_app

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45637894/article/details/126803670