关于RabbitMQ的基础知识点整理

RabbitMQ


MQ

​  消息队列(Message queue)是一种进程间通信或同一进程的不同线程间的通信方式,也是一种跨进程、异步的通信机制。就是说:消息的发送者和接收者不需要同时与消息队列互交。消息会保存在队列中,直到接收者取回它。


实现

消息队列常常保存在链表结构中。拥有权限的进程可以向消息队列中写入或读取消息。

广泛使用的消息队列有RabbitMQ 、 RocketMQ 、 ActiveMQ 、 Kafka 、 ZeroMQ 、 MetaMq等,而部分数据库如 Redis 、 Mysql 以及 phxsql 也可实现消息队列的功能。

队列:用来传递消息,发送者和接收者都是和队列进行交互的


消息中间件

MQ是遵循生产者-消费者典型模式的,一端往消息队列中写消息,一端从消息队列中读消息。而MQ则是遵循了AMQP协议的具体实现和产品。消息队列有两种方式:

区分AMQP和JMS

AMQP:是一种协议,是一个标准,具体的实现按照自己来就好。AMQP协议模型有三部分组成:生产者、消费者和服务端。

JMS:Java消息服务应用程序接口,


优点:应用解耦、异步处理、流量削锋

应用解耦:例如:用户注册用2秒就可以将出具存入数据库,为了增加用户体验,

就给用户发送邮件,先注册,发送邮件,存入数据库,一系列的时间花费9秒。

之后发送短信,先注册,发送短信,存入数据库等,花费12秒。这样的操作,代码修改的过高。只是为了提高用户的体验,耦合度过高,添加或修改功能时,原来的代码就得修改,响应时间过长。

解决:采用多线程,发送消息。消息队列,用户将数据给消息队列,消息队列调用邮件和短信,两个可以同时进行。注册和邮件的功能不受影响。复杂的异步封装起来。

异步处理:消息队列去找不同的执行功能,异步,两个可以同时进行

流量削锋:秒杀时,数据库扛不住,崩了,让消息按照业务规读取则进行排队,再找数据库去处理。先读500,读完之后,可以再读500.


使用场景:当不需要立即获得结果,但是并发量又需要进行控制的时候,差不多就是需要使用消息队列的时候


AMQP:高级消息队列协议,主要特征是面向消息,队列,路由,可靠性,安全。

RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如: Python 、 Ruby 、 .NET 、 Java 、 JMS 、 C 、 PHP 、 ActionScript 、 XMPP 、 STOMP 等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。


总结如下:

  • 基于AMQP协议
  • 高并发(是一个容量的概念,服务器可以接受的最大任务数量)
  • 高性能(是一个速度的概念,单位时间内服务器可以处理的任务数)
  • 高可用(是一个持久的概念,单位时间内服务器可以正常工作的时间比例)
  • 强大的社区支持,以及很多公司都在使用
  • 支持插件
  • 支持多语言


​  生产者是投递消息的一方,首先连接到Server,建立一个连接,开启一个信道;然后生产者声明交换器和队列,设置相关属性,并通过路由键将交换器和队列进行绑定。同理,消费者也需要进行建立连接,开启信道等操作,便于接收消息。

​  接着生产者就可以发送消息,发送到服务端中的虚拟主机,虚拟主机中的交换器根据路由键选择路由规则,然后发送到不同的消息队列中,这样订阅了消息队列的消费者就可以获取到消息,进行消费。

最后还要关闭信道和连接。

RabbitMQ是基于AMQP协议实现的,和AMQP协议简直就是一模一样。


RabbitMQ常用交换机类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值