RabbitMQ消息队列

一、RabbitMQ 简介

RabbitMQ 是什么?

RabbitMQ(Message Queue)是一个消息中间件是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang语言写成。

为什么要使用 RabbitMQ?

他能够解决了什么问题?

正常逻辑

多线程 

消息队列

 

异步处理
如用户注册后,需要发送注册邮件和注册短信。使用MQ后,接口的响应效率将大大提高。
应用解耦
如用户下单后,订单系统需要通知库存系统 。使用MQ后,订单系统写入消息队列就不再关心其他的后续操作了。实现订单系统与库存系统的应用解耦
流量削峰
一般发生在短时间内的大量请求,如秒杀、团抢活动等。使用MQ后,可以控制活动的人数 ,缓解短时间内高流量压垮应用 。假如消息队列长度超过最大数量,则直接抛弃用户请求或跳转到错误页面。 秒杀业务根据消息队列中的请求信息,再做后续处理 。(只接受请求不处理逻辑)给用户简单反馈。
消息通讯
可以实现点对点消息队列,或者聊天室等


二:消息队列基础知识。

1    Provider

消息生产者,就是投递消息的程序。

2    Consumer

消息消费者,就是接受消息的程序。

3    没有使用消息队列时消息传递方式

Provider----》Consumer

4    使用消息队列后消息传递方式

Provider----》管道(消息队列)------》Consumer

5    什么是队列?(管道,先进先出)

队列就像存放了商品的仓库或者商店,是生产商品的工厂和购买商品的用户之间的中转站

5.1 队列里存储了什么?

⦁    rabbitMQ 中,信息流从你的应用程序出发,来到 Rabbitmq 的队列,所有信息可以只存储在一个队列中。队列可以存储很多信息,因为它基本上是一个无限制的缓冲区,前提是你的机器有足够的存储空间。

⦁    队列和应用程序的关系?

多个生产者可以将消息发送到同一个队列中,多个消费者也可以只从同一个队列接收数
据。

三、    RabbitMQ 原理

 1.Message
消息。消息是不具名的,它由消息头消息体组成。消息体是不透明的,而消息头则由一系列可选属性组成,这些属性包括:routing-key(路由键)、priority(相对于其他消息的
优先权)、delivery-mode(指出消息可能持久性存储)等。


2.Publisher
消息的生产者。也是一个向交换器发布消息的客户端应用程序。


3.Consumer
消息的消费者。表示一个从消息队列中取得消息的客户端应用程序。


4.Exchange(物流公司)
交换器。用来接收生产者发送的消息并将这些消息路由给服务器中的队列。 
exchange 内部实现为保存 binding 关系的查找表
三种常用的交换器类型(类似于不同的物流公司)
direct(发布与订阅 完全匹配):一对一
fanout(广播):群发
topic(主题,规则匹配): 场景应用


5.Binding
绑定。用于消息队列和交换器之间的关联。一个绑定就是基于路由键将交换器和消息
队列连接起来的路由规则,所以可以将交换器exchange理解成一个由绑定构成的路由表。


6.Queue
消息队列。用来保存消息直到发送给消费者。它是消息的容器,也是消息的终点。一个消息可投入一个或多个队列。消息一直在队列里面,等待消费者链接到这个队列将其取
走。


7.Routing-key
路由键。RabbitMQ 决定消息该投递到哪个队列的规则。(也可以理解为队列的名称, 路由键是 key,队列是 value)
队列通过路由键绑定到交换器。
消息发送到 MQ 服务器时,消息将拥有一个路由键,即便是空的,RabbitMQ 也会将其和绑定使用的路由键进行匹配。
如果相匹配,消息将会投递到该队列。
如果不匹配,消息将会进入黑洞。


8.Connection
链接。指 rabbit 服务器和服务建立的 TCP 链接。(基于ip+port的)


9.Channel
信道(隧道)
channel 是实际进行路由工作的实体,即负责按照 routing_key 将 message 投递给queue 
1,Channel 中文叫做信道,是 TCP 里面的虚拟链接(汽车行车道)。例如:电缆相当于 TCP,信道
是一个独立光纤束,一条 TCP 连接上创建多条信道是没有问题的。
2,TCP 一旦打开,就会创建 AMQP 信道。
3,无论是发布消息、接收消息、订阅队列,这些动作都是通过信道完成的。


10.Virtual Host
虚拟主机。表示一批交换器,消息队列和相关对象。虚拟主机是共享相同的身份认证和加密环境的独立服务器域。每个 vhost 本质上就是一个 mini 版的 RabbitMQ 服务器, 拥有自己的队列、交换器、绑定和权限机制。vhost 是 AMQP 概念的基础,必须在链接时
指定,RabbitMQ 默认的 vhost 是/


11.Borker
表示消息队列服务器实体。
交换器和队列的关系
交换器是通过路由键和队列绑定在一起的,如果消息拥有的路由键跟队列和交换器的    路由键匹配,那么消息就会被路由到该绑定的队列中。
也就是说,消息到队列的过程中,消息首先会经过交换器,接下来交换器在通过路由    键匹配分发消息到具体的队列中。
路由键可以理解为匹配的规则。
RabbitMQ 为什么需要信道?为什么不是 TCP 直接通信?
⦁    TCP 的创建和销毁开销特别大。创建需要 3 次握手,销毁需要 4 次分手。
⦁    如果不用信道,那应用程序就会以 TCP 链接 Rabbit,高峰时每秒成千上万条链接会造成资源巨大的浪费,而且操作系统每秒处理 TCP 链接数也是有限制的,必定造成性能瓶颈。
3.    信道的原理是一条线程一条通道,多条线程多条通道同用一条 TCP 链接。一条 TCP
链接可以容纳无限的信道,即使每秒成千上万的请求也不会成为性能的瓶颈。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值