RabbitMQ 入门到应用 ( 一 ) 基本概念

RabbitMQ是一个开源消息代理和队列服务器,基于AMQP协议,用于不同应用间的数据共享。它提供了异步通信机制,提高并发量并降低服务耦合。AMQP协议引入了Exchange和Binding,使得消息路由更灵活。典型应用场景包括异步处理、流量削峰、日志处理和应用解耦。RabbitMQ特性包括高性能、开源、丰富的API以及高可靠性。
摘要由CSDN通过智能技术生成

1.什么是RabbitMQ

1.0.什么是MQ

1.1.RabbitMQ简介

消息队列提供一个异步通信机制,消息的发送者不必一直等待到消息被成功处理才返回,而是立即返回。消息中间件负责处理网络通信,如果网络连接不可用,消息被暂存于队列当中,当网络畅通的时候在将消息转发给相应的应用程序或者服务,当然前提是这些服务订阅了该队列。如果在商品服务和订单服务之间使用消息中间件,既可以提高并发量,又降低服务之间的耦合度。

RabbitMQ是一个开源的消息代理的队列服务器,用来通过普通协议在完全不同的应用之间共享数据。

RabbitMQ是使用Erlang语言来编写的,并且RabbitMQ是基于AMQP协议的。Erlang语言在数据交互方面性能优秀,有着和原生Socket一样的延迟,这也是RabbitMQ高性能的原因所在。可谓“人如其名”,RabbitMQ像兔子一样迅速。

1.2.AMQP高级消息队列协议

AMQP(Advanced Message Queuing Protocol)

提到RabbitMQ,就不得不提AMQP协议。AMQP协议是具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。

AMQP中消息的路由过程和JMS存在一些差别。AMQP中增加了Exchange和Binging的角色。生产者把消息发布到Exchange上,消息最终到达队列并被消费者接收,而Binding决定交换器的消息应该发送到哪个队列。

1.2.1.AMQP和JMS

JMS java message service java消息服务

MQ是消息通信的模型,并发具体实现。现在实现MQ的有两种主流方式:AMQP、JMS。

两者间的区别和联系:

  • JMS是定义了统一的接口,来对消息操作进行统一;AMQP是通过规定协议来统一数据交互的格式
  • JMS限定了必须使用Java语言;AMQP只是协议,不规定实现方式,因此是跨语言的。
  • JMS规定了两种消息模型;而AMQP的消息模型更加丰富

1.3.RabbitMQ 特点

RabbitMQ除了像兔子一样跑的很快以外,还有这些特点:

  • 开源、性能优秀,稳定性保障
  • 提供可靠性消息投递模式、返回模式
  • 与Spring AMQP完美整合,API丰富
  • 集群模式丰富,表达式配置,HA模式,镜像队列模型
  • 保证数据不丢失的前提做到高可靠性、可用性

1.4.MQ典型应用场景

  • 异步处理。把消息放入消息中间件中,等到需要的时候再去处理。
  • 流量削峰。例如秒杀活动,在短时间内访问量急剧增加,使用消息队列,当消息队列满了就拒绝响应,跳转到错误页面,这样就可以使得系统不会因为超负载而崩溃。
  • 日志处理
  • 应用解耦。假设某个服务A需要给许多个服务(B、C、D)发送消息,当某个服务(例如B)不需要发送消息了,服务A需要改代码再次部署;当新加入一个服务(服务E)需要服务A的消息的时候,也需要改代码重新部署;另外服务A也要考虑其他服务挂掉,没有收到消息怎么办?要不要重新发送呢?是不是很麻烦,使用MQ发布订阅模式,服务A只生产消息发送到MQ,B、C、D从MQ中读取消息,需要A的消息就订阅,不需要了就取消订阅,服务A不再操心其他的事情,使用这种方式可以降低服务或者系统之间的耦合。

2.架构及基本概念

生产者 Producer:

产生数据发送消息的程序是生产者

消费者 Consumer :

消费与接收具有相似的含义。消费者大多时候是一个等待接收消息的程序。

消息 message :

不同的应用之间传递的共享数据

请注意生产者,消费者和消息中间件很多时候并不在同一机器上。同一个应用程序既可以是生产者又是可以是消费者。

在这里插入图片描述

代理 Broker :

接收和分发消息的应用,RabbitMQ Server就是Message Broker

交换机 Exchange :

message 到达 broker 的第一站,一方面它接收来自生产者的消息,另一方面它将消息推送到队列中。

队列 Queue :

队列是 RabbitMQ 内部使用的一种数据结构,尽管消息流经 RabbitMQ 和应用程序,但它们只能存储在队列中。队列仅受主机的内存和磁盘限制的约束,本质上是一个大的消息缓冲区。许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。这就是我们使用队列的方式

在这里插入图片描述

交换机必须确切知道如何处理它接收到的消息,是将这些消息推送到特定队列还是推送到多个队列,亦或者是把消息丢弃,这个得有交换机类型决定。

根据分发规则,匹配查询表中的 routing key 与 binding Key 对照 ,分发消息到queue 中去。

路由键 Routing Key :

生产者将消息发送到交换机时会携带一个key,来指定路由规则

绑定键 Binding Key :

在绑定 交换机Exchange和队列Queue时,会指定一个BindingKey, 生产者发送消息携带的RoutingKey会和bindingKey对比,若一致就将消息分发至这个队列

绑定 Binding:

交换机Exchange 和 队列Queue 之间的虚拟连接,绑定Binding 中可以包含 绑定键 Routing key,绑定Binding 信息被保存到 交换机Exchange 中的查询表中,用于 消息Message 的分发依据

在这里插入图片描述

连接 Connection :

生产者Publisher / 消费者Consumer 和 代理broker之间的TCP连接

在这里插入图片描述

信道 Channel :

如果每一次访问RabbitMQ都建立一个Connection,在消息量大的时候建立TCP, 连接Connection的开销将是巨大的,效率也较低。信道 Channel是在连接Connection 内部建立的逻辑连接,如果应用程序支持多线程,通常每个线程Thread创建单独的信道Channel进行通讯,

AMQP method包含了Channel id 帮助客户端和代理Message broker识别 信道Channel,所以信道Channel 之间是完全隔离的。

信道Channel作为轻量级的连接Connection极大减少了操作系统建TCP Connection的开销.

在这里插入图片描述

在这里插入图片描述

虚拟主机 vHost :

每一个RabbitMQ服务器可以开设多个虚拟主机每一个vhost本质上是一个mini版的RabbitMQ服务器,拥有自己的 “交换机exchange、绑定Binding、队列Queue”,更重要的是每一个vhost拥有独立的权限机制,这样就能安全地使用一个RabbitMQ服务器来服务多个应用程序,其中每个vhost服务一个应用程序。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值