在没有使用MQ之前,如果我们需要把一个页面发送给多个服务器,则需要像下图一样,将页面同步操作发送给不同的服务器,这个效率比较低,而且是页面和服务器直接发送。页面在每次发送之前需要更改多次要发送给的服务器的ip地址。
有了消息队列之后,这个页面只需要知道消息队列的地址,并且发送一次就可以了。MQ是一个非常善于做并发操作的高手,让它将消息发送给这三个服务器,是并发操作,非常高效率的。不要说3个就是3000个也是分分钟的事情。为什么呢?
支持AMQP协议 高并发能力特别好,是一种协议的标准
erlang语言专门用于开发高并发的程序。
如上图所示:
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
发送消息的参数:
交换机名 队列名 基础属性 消息字节数组
在定义消费者的时候,要重写一个方法handleDelivery 处理消息