在安裝openstack的時候,須要安裝rabbitmq,百度了下rabbitmq,發現是用erlang寫的,基於對erlang的好感,因而就想了解下rabbitmq。html
rabbitmq中文翻譯的話,主要仍是mq字母上:Message Queue,即消息隊列的意思。前面還有個rabbit單詞,就是兔子的意思,和python語言叫python同樣,老外仍是蠻幽默的。rabbitmq服務相似於mysql、apache服務,只是提供的功能不同。rabbimq是用來提供發送消息的服務,能夠用在不一樣的應用程序之間進行通訊。python
安裝rabbitmqmysql
先來安裝下rabbitmq,在ubuntu 12.04下能夠直接經過apt-get安裝:sql
sudo apt-get install rabbitmq-server
安裝好後,rabbitmq服務就已經啓動好了。接下來看下python編寫Hello World!的實例。實例的內容就是從send.py發送「Hello World!」到rabbitmq,receive.py從rabbitmq接收send.py發送的信息。apache
rabbitmq消息發送流程(來源rabbitmq官網)ubuntu
其中P表示produce,生產者的意思,也能夠稱爲發送者,實例中表現爲send.py;C表示consumer,消費者的意思,也能夠稱爲接收者,實例中表現爲receive.py;中間紅色的表示隊列的意思,實例中表現爲hello隊列。服務器
python使用rabbitmq服務,可使用現成的類庫pika、txAMQP或者py-amqplib,這裏選擇了pika。app
安裝pika函數
安裝pika可使用pip來進行安裝,pip是python的軟件管理包,若是沒有安裝,能夠經過apt-get安裝測試
sudo apt-get install python-pip
經過pip安裝pika:
sudo pip install pika
send.py代碼
鏈接到rabbitmq服務器,由於是在本地測試,因此就用localhost就能夠了。
1 2 3 |
|
聲明消息隊列,消息將在這個隊列中進行傳遞。若是將消息發送到不存在的隊列,rabbitmq將會自動清除這些消息。
1 |
|
發送消息到上面聲明的hello隊列,其中exchange表示交換器,能精確指定消息應該發送到哪一個隊列,routing_key設置爲隊列的名稱,body就是發送的內容,具體發送細節暫時先不關注。
1 |
|
關閉鏈接
1 |
|
完整代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
先來執行下這個程序,執行成功的話,rabbitmqctl應該成功增長了hello隊列,而且隊列裏應該有一條信息,用rabbitmqctl命令來查看下
rabbitmqctl list_queues
在筆者的電腦上輸出以下信息:
rabbitmq查看隊列信息
確實有一個hello隊列,而且隊列裏有一條信息。接下來用receive.py來獲取隊列裏的信息。
receive.py代碼
和send.py的前面兩個步驟同樣,都是要先鏈接服務器,而後聲明消息的隊列,這裏就再也不貼一樣代碼了。
接收消息更爲複雜一些,須要定義一個回調函數來處理,這邊的回調函數就是將信息打印出來。
1 2 |
|
告訴rabbitmq使用callback來接收信息
1 |
|
開始接收信息,並進入阻塞狀態,隊列裏有信息纔會調用callback進行處理。按ctrl+c退出。
1 |
|
完整代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
執行程序,就可以接收到隊列hello裏的消息Hello World!,而後打印在屏幕上。換一個終端,再次執行send.py,能夠看到receive.py這邊會再次接收到信息。