rabbitMQ知识总结

消息队列的介绍

消息队列有那些应用场景呢?

在没有使用MQ之前,如果我们需要把一个页面发送给多个服务器,则需要像下图一样,将页面同步操作发送给不同的服务器,这个效率比较低,而且是页面和服务器直接发送。页面在每次发送之前需要更改多次要发送给的服务器的ip地址。
同步操作,效率比较低有了消息队列之后,这个页面只需要知道消息队列的地址,并且发送一次就可以了。MQ是一个非常善于做并发操作的高手,让它将消息发送给这三个服务器,是并发操作,非常高效率的。不要说3个就是3000个也是分分钟的事情。为什么呢?

  1. 因为rabbitmq是erlang语言编写的,这种语言又称二郎神语言,在编写高并发操作功能时,非常高效。
    MQ只能发送异步请求吗? 不是的,它也可以通过RPC发送同步请求,远程过程调用。
    在这里插入图片描述
    rpc发送的消息都有两个参数:消息编号 回调函数
    服务器返回的消息也带着这个编号,因此可以把把消息和消息的回执对应起来。
  2. rabbitmq是按照高级消息队列协议的标准开发的。符合标准,消息队列的发布订阅性能很高。

异步操作 解耦合 不用直接通讯

总结一下,使用rabbitmq的好处为:

  1. 可以使任务异步处理,采用并发操作,提高效率
  2. 解耦合,让生产者和发布者都只需要关心自己的功能,而不需要去关注太多的关于发送消息的问题。

在这里插入图片描述
支持AMQP协议 高并发能力特别好,是一种协议的标准
erlang语言专门用于开发高并发的程序。

下面介绍一下rabbitmq的工作原理

在这里插入图片描述
如上图所示:
Broker 消息队列进程 是包含两部分的 交换机 和 队列
exchange按照一定的规则,对消息进行转发,并转发到指定的队列中。exchange绑定queue的方式有6中,binding-key

queue:存储消息的队列,如果消息一直往队列里发,但是没有消费者绑定到这个队列,并消费这个队列的数据的话,会导致这个queue占用的内存越来越大,最终会把rabbitmq挤崩溃,所以设置在建立rabbitmq的时候,设置autoDelete= true,很重要,这个设置会让queue去检测该队列是否有消费者消费,如果没有,则这条消息就会被删除。

Producer :生产者通过和MQ建立安全的TCP连接来send消息给MQ。生产者 通过socket和MQ建立连接,一个socket连接中包含多个会话通道 channel。发布消息的时候,可以指定让交换机发布到哪个队列 用routing-key去绑定。
Consumer: 消费者订阅队列,去消费消息。每个消费者监听自己订阅的队列

图解Broker
AMQP协议的具体内容
生产者代码
参数介绍
在这里插入图片描述
发送消息的参数:
交换机名 队列名 基础属性 消息字节数组
在这里插入图片描述
消费者实现代码 在定义消费者的时候,要重写一个方法handleDelivery 处理消息