一、什么是RabbitMQ官网地址:https://www.rabbitmq.com/getstarted.html
RabbitMQ is lightweight and easy to deploy on premises and in the cloud. It supports multiple messaging protocols. RabbitMQ can be deployed in distributed and federated configurations to meet high-scale, high-availability requirements.
RabbitMQ是支持多种数据,支持分布式,高可用。
RabbitMq就像一个邮局,我们将消息放到邮箱中,它会将消息发送到最终用户。但是他在中间不会处理数据。
以Topic Exchange为例,生产者无需知道谁是消费者、谁是消息队列。他只要将消息和routing key放到exchange。exchange在配置中跟queue绑定,exchange只需要知道消息和队列的关系,其中的关联就是routing_key和banding key。消费者 只需监听queue通知即可,队列接收消息通知消费者。 二、RabbitMQ基本概念
生产者(Producter)发送消息的一方,发消息时生产者指定需要发送的交换机和路由即可将消息发送到指定的交换机上。
队列(Queue)一个队列名称是一个在RabbitMQ里面的信箱。虽然消息是通过RabbitMQ到应用,但是他们只能储存在一个队列中。队列只受限制于内存和磁盘大小,它相当于一个巨大的消息缓存。
生产者可以发送消息到一个队列,消费者可以从队列中获取消息。
由于队列有 FIFO 的特性,只有确定前一条消息被消费者接收之后,才会把这条消息从数据库删除,继续投递下一条消息。
通过监听队列,获取消息的一方。
交换机(exchange)在 RabbitMQ 里面永远不会出现消息直接发送到队列的情况。因为在 AMQP 里面引入了交换机(Exchange)的概念,用来实现消息的灵活路由。交换机是一个绑定列表,用来查找匹配隊列的绑定关系。队列使用绑定键(Binding Key)跟交换机建立绑定关系。生产者发送的消息需要携带路由键(Routing Key),交换机收到消息时会根据它保存的绑定列表,决定将消息路由到哪些与它绑定的队列上。
注意:交换机与队列、队列与消费者都是多对多的关系
交换机路由方式是指从交换机发送到队列的方式。有三种分别为direct、topic、fnout。topic和direct区别
如果是topic交换机,生成将message routing key = NYES,消费者队列binding key =
*或者#或者NYES 都可以接收到消息。
但是直连就不可以,不支持通配符。
现在如果routing key = NYES.TECH.MSFT,queue binding key怎么获取呢?
NYES.TECH.MSFT 可以NYES.# 可以# 可以NYES.# 可以*.* 不可
-NYES.* 不可NYES.TECH.* 可以NYES.*.MSFT 可以
信道(Channel)
如果所有的生产者发送消息和消费者接收消息,都直接创建和释放 TCP 长连接的话,对于 Broker 来说肯定会造成很大的性能损耗,因为 TCP 连接是非常宝贵的资源,创建和释放也要消耗时间。
所以在 AMQP 里面引入了 Channel 的概念,它是一个虚拟的连接。我们把它翻译成通道,或者消息信道。这样我们就可以在保持的 TCP 长连接里面去创建和释放Channel,大大了减少了资源消耗。
VHOST 可以提高硬件资源的利用率、资源的隔离和权限的控制。它的作用类似于编程语言中的namespace 和 package,不同的 VHOST 中可以有同名的 Exchange 和 Queue,它们是完全透明的
三、RabbitMQ能做什么 1. 异步通信一般业务逻辑都是串行的,每个业务之间都需要等待前面逻辑执行完成,但是异步通信则无需等待消息发送出去即可。 2. 解耦
业务之间无需关联,消息发送出去下游服务监听处理 3. 流量削峰
before:所有的请求都在等待下单服务到支付服务完成,导致后面的用户无法下单after:用户下单请求到rabbit broker,rabbit根据配置来分发请求。这样能够保证在峰值请求下系统不会宕机,又可以保护支付服务。



