什么是RabbitMQ

一、什么是RabbitMQ

1.1 同步通讯和异步通讯

  • 同步通讯:就像打电话,需要实时响应。
  • 异步通信:就像发微信,不需要马上回复。

两种方式各有优劣,打电话可以立即得到响应,但是你却不能跟多个人同时通话。发微信可以同时与多个人收发信息,但是往往响应会有延迟。

学SpringCloud的时候,我们的Feign 其实就是同步通讯的,他其实有以下这几个缺点

  1. 耦合度高:(每次有新的需求,都需要更改代码)
  2. 性能下降:(消费者需要等待提供者响应,如果调用链过长,那么响应的时间等于每次调用的时间之和)
  3. 资源浪费:调用链中的每个服务在等待响应的过程中,不能释放请求占用的资源,高并发场景下,将极度浪费系统的资源。
  4. 级联失败:如果服务提供者出现问题,所有消费者都会跟着出问题,严重会导致整个微服务群故障。

当然,同步调用(Feign)也有他的优点他的时效性很强,可以立即得到结果。

异步调用就可以避免上述这些问题!

我们以购买商品为例,用户支付后需要调用订单服务完成订单状态修改,调用物流服务,从仓库分配响应的库存并准备发货。

在事件模式中,支付服务是事件发布者(publisher),在支付完成后只需要发布一个支付成功的事件(event),事件中带上订单id。

订单服务和物流服务是事件订阅者(Consumer),订阅支付成功的事件,监听到事件后完成自己业务即可。

为了解除事件发布者与订阅者之间的耦合,两者并不是直接通信,而是有一个中间人(Broker)。发布者发布事件到Broker,不关心谁来订阅事件。订阅者从Broker订阅事件,不关心谁发来的消息。 如下图所示:

在这里插入图片描述
Broker 是一个像数据总线一样的东西,所有的服务要接收数据和发送数据都发到这个总线上,这个总线就像协议一样,让服务间的通讯变得标准和可控。

优点:

  • 吞吐量提升:无需等待订阅者处理完成,响应更快速
  • 故障隔离:服务没有直接调用,不存在级联失败问题
  • 资源不浪费:调用间没有阻塞,不会造成无效的资源占用
  • 耦合度极低:每个服务都可以灵活插拔,可替换
  • 流量削峰:不管发布事件的流量波动多大,都由Broker接收,订阅者可以按照自己的速度去处理事件

缺点:

  • 管理困难:架构复杂了,业务没有明显的流程线,不好管理
  • 依赖性高:需要依赖于Broker的可靠、安全、性能

1.2 初识MQ

MQ,全称是 Message Queue(消息队列),你可以简单理解为就是一个存放消息的队列。也就是事件驱动架构中的 Broker

目前比较常见的MQ的实现有以下四种:RabbitMQActiveMQRocketMQKafka

RabbitMQActiveMQRocketMQKafka
公司/社区RabbitApache阿里Apache
开发语言ErlangJavaJavaScala&Java
协议支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定义协议自定义协议
可用性一般
单机吞吐量一般非常高
消息延迟微秒级毫秒级毫秒级毫秒以内
消息可靠性一般一般

目前国内使用比较多的是:RabbitMQRocketMQ 以及 Kafka
那么,如何选择我们应该用哪一个呢?从上面的表格可以看出来,他们是互有优缺点的。假设你需要很高的吞吐量,但是,对消息的延迟以及完整性(可靠性)要求不高的话,那么肯定首选Kafka。

  • 追求可用性:Kafka、 RocketMQ 、RabbitMQ
  • 追求可靠性:RabbitMQ、RocketMQ
  • 追求吞吐能力:RocketMQ、Kafka
  • 追求消息低延迟:RabbitMQ、Kafka

下面,我们以RabbitMQ为例,简单介绍并给出详细的下载教程!!!

1.3 RabbitMQ的下载

RabbitMQ是基于Erlang语言 开发的开源消息中间件,官网地址:https://www.rabbitmq.com

如果想要更好地学习RabbitMQ,首推官网的文档进行学习,就是这个位置:
在这里插入图片描述
下面介绍一下CentOS 7 怎么下载RabbitMQ。命令如下:

docker pull rabbitmq:3-management

这是最简单的方式,直接使用我们的Docker进行下载即可。不熟悉的Docker的小伙伴可以看我的Docker专栏快速入门啊。

下载完成后,我们使用命令docker images查看我们的镜像是否下载成功。(3-management是有管理平台的,3是没有的
在这里插入图片描述

然后我们启动我们的容器,命令如下:

docker run \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=root \
--name mq \
--hostname mq1 \
-p 15672:15672 \
-p 5672:5672 \
-d \
rabbitmq:3-management

解释一下:

  • docker run:启动容器
  • -e RABBITMQ_DEFAULT_USER=admin:配置RabbitMQ管理平台的账号
  • -e RABBITMQ_DEFAULT_PASS=root:配置RabbitMQ管理平台的密码
  • –name mq:给容器取个名字
  • –hostname mq1:集群部署的时候需要用到
  • -p 15672:15672:配置管理平台的端口号映射
  • -p 5672:5672:配置请求响应的端口号映射
  • -d:后台执行
  • rabbitmq:3:以rabbitmq:3镜像文件创建容器

启动完成后,使用命令docker ps可以查看我们目前启动的容器如下:
在这里插入图片描述
然后,我们还得启动防火墙:

firewall-cmd --add-port=5672/tcp --permanent --zone=docker
firewall-cmd --add-port=15672/tcp --permanent --zone=docker
firewall-cmd --reload

完成后,我们输入虚拟机或者你的云服务器的ip地址加端口号(15672),比如,192.168.10.20:15672,可以看到rabbitMQ管理平台登录页面如下:
在这里插入图片描述
账号密码刚才我们设置为admin和root了。输入后直接登录就可以了。

进去后,我们首先看到的Overview就是我们的RabbitMq的总览,由于没有配置集群,所以下面只有一个mq1,mq1这个名字也是我们刚才在docker上配置的(–hostname mq1)。
在这里插入图片描述
第二个菜单项Connection(连接),要把RabbitMQ作为Broker,我们的服务当然要与我们的RabbitMQ建立连接。
在这里插入图片描述
第三个菜单项Channels(通道),建立连接后,我们必须创建我们的通道,让我们的生产者和消费者可以在上面收发信息。
在这里插入图片描述
第四个菜单项Exchanges(交换机),实现的是类似我们路由的功能。
在这里插入图片描述
第五个菜单项Queue(队列),用来做我们的消息存储。
在这里插入图片描述
第六个菜单项Admin(管理),用来管理我们的用户信息。目前只有我们当前登录的用户。
在这里插入图片描述
如果想要创建一个新的用户也很简单,下面有一个Add a user,点一下,输入我们的账号密码,然后给他定位一个角色就行了。
在这里插入图片描述
创建成功后,我们的新用户,可以看到,他是没有任何可以访问的虚拟主机的。
在这里插入图片描述
虚拟主机的创建如下:
点击右侧的Virtual Hosts,然后点击Add a virtual host,输入我们的虚拟主机路径,然后点击添加按钮就行了。虚拟主机与虚拟主机之间的关系类似于名称空间,是彼此独立的。
在这里插入图片描述
如果此时,我们要给某个用户分配一个虚拟主机,那么,我们只需要点击我们用户的Name。
在这里插入图片描述
选择要分配给他的虚拟主机,然后点击Set permission 按钮即可。
在这里插入图片描述
点击后,我们可以看到,上面的Current permissions多了一个叫 / 的虚拟主机,如果要别的也可以添加。
在这里插入图片描述
退出来后,我们也可以看到,Keeling多了一个可以访问的虚拟主机 / 。
在这里插入图片描述
RabbitMq的架构如下:
在这里插入图片描述
1、服务的提供者将消息发送给我们的交换机
2、交换机再把消息发送到我们的Queue队列中
3、然后队列再把接收到的消息发送给我们的消费者。
期间,虚拟主机与虚拟主机的消息和路由是完全独立,互不干扰的

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值