day11-消息队列介绍
概述
RabbitMQ,它是用来做什么的呢?
答:它是用来发消息的,消息队列。
那么,它跟我们之前的学习的python的线程queue和进程的queue有什么区别呢?
答:其实他们干的事情都是一样的。
先来说说我们之前学习的python的queue吧:
- 线程queue:只是用于多个线程之间,进行数据同步交互的。
- 进程queue:只是用于父进程与子进程进行交互,或者属于同一父进程下的多个子进程进行交互。
如果是两个独立的程序,即便是python 程序,两个完全独立的python程序也依然是不用这个python的这个线程或者进程queue来通信的。
那么问题来了,我现在两个独立的python程序,或者python跟Java程序,或者跟PHP程序,或者两台独立机器之间的也涉及到生产者消费者模型,这个时候用python的线程queue和进程queue就通信不了了。那怎么办呢?这个时候我们只能搞一个中间代理,这个中间代理就是RabbitMQ。
消息发送方式
解析:qq如果想要发送数据到word,除了可以通过qq和word之间建立一个socket外,当然,除了建立socket,还要这两者都要对发送和接收的数据进行处理,这相对会比较麻烦,之所以通过一个中间代理进行相互通信,是因为RabbitMQ把这些处理都做好了,你只需要和RabbitMQ这个中间代理建立连接和发送指令即可(已经封装好的管道),那么同时qq和word不需要写各自相互通信的socket了,qq只要将数据发送给中间代理,中间代理会将数据发送给word。
这样做有2个好处
- qq,word,中间代理之间不需要维护复杂的socket连接,它们全都是已经封装好的,所以中间代理为不同的应用程序省去了维护相互之间的通信。
- 中间代理不仅仅为qq和word服务,它还可以为更多的其他应用程序服务,如果微信想要和qq,word之间进行通信,那么直接加入就好,这时候,中间代理就成为了一个公共的消息的中间商。
注:现在市场上有这种消息队列的应用有,RabbitMQ,ZeroMQ,ActiveMQ.....等等,只不过是现在RabbitMQ最火而已。