在之前的有關線程,進程的博客中,我們介紹了它們各自在同一個程序中的通信方法。但是不同程序,甚至不同編程語言所寫的應用軟件之間的通信,以前所介紹的線程、進程隊列便不再適用了;此種情況便只能使用socket編程了,然而不同程序之間的通信便不再像線程進程之間的那么簡單了,要考慮多種情況(比如其中一方斷線另一方如何處理;消息群發,多個程序之間的通信等等),如果每遇到一次程序間的通信,便要根據不同情況編寫不同的socket,還要維護、完善這個socket這會使得編程人員的工作量大大增加,也使得程序更易崩潰。所以,一般遇到這種情況,便使用消息隊列MQ(Message Queue),那么問題來了。
1. 什么是消息隊列MQ?
MQ是一種應用程序對應用程序的通信方法。應用程序通過讀出(寫入)隊列的消息(針對應用程序的數據)來通信,而無需使用專用連接來鏈接它們。消息傳遞指的是程序之間通過在消息中發送數據進行通信,而不是通過直接調用彼此來通信,排隊指的是應用程序通過 隊列來通信。隊列的使用排除了接收和發送應用程序同時執行的要求。
2. 什么是rabbitmq?如何使用它?
RabbitMQ是流行的開源消息隊列系統,用erlang語言開發。RabbitMQ是AMQP(高級消息隊列協議)的標準實現。
RabbitMQ也是前面所提到的生產者消費者模型,一端發送消息(生產任務),一端接收消息(處理任務)。
rabbitmq的詳細使用(包括各種系統的安裝配置)可參見其官方文檔:http://www.rabbitmq.com/documentation.html
由于應用程序之間的通信情況異常復雜,rabbitmq支持的編程語言有10多種,所以在此博客中不可能完全演示rabbitmq的所有使用。本片博客將會介紹rabbitmq在python中的基本使用,如果你只想使用rabbitmq完成一些簡單的任務,則本篇博客足以滿足你的需求;如果你想深入學習了解rabbitmq的工作原理,那么讀完本篇博客,你可以更容易的讀懂rabbitmq的官方文檔;當然這些只限于你在使用python編程。
在python中我們使用pika(第三方模塊,使用pip安裝即可使用)模塊進行rabbitmq的操作,接下來,使用python實現一個rabbitmq最簡單的通信。
In the diagram below, "P" is our producer and "C" is our consumer. The box in the middle is a queue - a message buffer that RabbitMQ keeps on behalf of the consumer.
Our overall design will look like:

Producer sends messages to the "hello" queue. The consumer receives messages from that queue.
例一(簡單的消息收發):
Sending

Our first programsend.pywill send a single message to the queue. The first thing we need to do is to establish a connection with RabbitMQ server.
新聞熱點
疑難解答