用Python嘗試RabbitMQ

來源:互聯網
上載者:User

測試環境1:win7

測試環境2:ubuntu10.04

 

安裝Erlang環境

1、下載: http://erlang.org/download.html 

自己根據需要下載源碼包或win的二進位包

2、安裝:

windows環境就沒啥好說的了,一路next~

主要說下linux環境,其實我用的ubuntu10.04已經預裝了erlang,版本是RB13B03,但是貌似不支援最新版的RabbitMQ

對於想使用最新版RabbitMQ或還沒有安裝erlang環境的童鞋,需要重新安裝下最新版的erlang

目前Erlang官方最新版本是R14A,
首先需要先安裝一些依賴包

 

sudo apt-get install build-essential 

sudo apt-get install libncurses5-dev 

sudo apt-get install m4 

sudo apt-get install libssl-dev

sudo apt-get install libc6

sudo apt-get install unixODBC

sudo apt-get install unixODBC-devel

sudo apt-get install gcj -----------------》好幾十兆,主要用於java,暫時對我沒用,所以我沒裝它:P

正式開始裝了

./configure --without-javac ----------》因為我沒有安裝gcj,所以configure時關閉了javac選項

make 

sudo make install

沒意外的話erlang就裝完了,可以用whereis erlang看一下

 

安裝RabbitMQ

ubuntu使用者的話其實可以直接使用apt-get自動化搞定

sudo apt-get install rabbitmq-server

安裝完畢後會自動啟動服務,一切就這麼簡單:)下面說下一般方法

 

1、下載:http://www.rabbitmq.com/server.html

普通linux使用者建議下載普通源碼包 Packaged for generic Unix systems

windows使用者就直接下載windows包 Packaged for Windows systems

2、安裝(linux&windows):

其實RabbitMQ現在已經算是個綠色軟體,免安裝

一般建議解壓後,直接把整個目錄拷貝到erlang的lib下

3、運行(linux&windows):

rabbitmq中sbin目錄下是相關的工具指令碼

通過執行該指令碼即可運行(非守護)

【linux】sudo rabbitmq_server-1.8.1/sbin/rabbitmq-server

【windows】rabbitmq_server-1.8.1/sbin/rabbitmq-server.bat

關於windows使用者:

1、需要設定環境變數ERLANG_HOME為erlang的根目錄(具體就不用細說了吧~)

2、若需服務方式運行可以使用rabbitmq-service.bat進行安裝服務(win7使用者注意許可權問題)

 

 

安裝py-amqplib

正如那篇《[RabbitMQ+Python入門經典] 兔子和兔子窩》所說

根據你的需求,py-amqplib或者txAMQP都是可以的。因為是基於Twisted的,txAMQP可以保證用非同步IO構建超高效能的AMQP程式。但是Twisted編程本身就是一個很大的主題……因此清晰起見,我們打算用 py-amqplib。

1、下載:http://barryp.org/software/py-amqplib/

2、安裝:

非常easy,解壓後進入目錄直接

【linux】sudo ./setup.py install
【windows】python setup.py install

歐了,安裝完畢,可以在python中import了:)

 

簡單Demo測試

 

py-amqplib中帶有簡單的demo,在amqplib-0.6/demo中,我們先用這倆測試下訊息的發送和接受

 

demo_receive.py -------------------》訊息消費者

demo_send.py ----------------------》訊息生產者

運行RabbitMQ後,先運行 ./demo_receive.py,建立Broker(其實就是交換器和隊列啦)

接著另開一終端,運行 ./demo_send.py "hello, Linvo"

哇,在第一個終端顯示出來了,好神奇啊~~~

 

運行時可以指定RabbitMQ的host、userid、password等參數,預設host是本機,userid和password都是guest

自己可以通過rabbitmqctl工具來刪除、建立使用者,並設定許可權等

./rabbitmqctl delete_user guest -------》刪除預設的guest使用者

./rabbitmqctl add_user linvo 111 ---------》添加新使用者linvo,密碼111

./rabbitmqctl set_permissions -p / linvo ".*" ".*" ".*" -----------》設定linvo在/的虛擬機器主機的許可權和之前的guest一樣

PS:暫時沒弄懂明白具體的許可權正則規則 囧@&^%$…… 

再測試就改這樣了

 

./demo_receive.py -u linvo -p 111

./demo_send.py -u linvo -p 111 "hello,Linvo"

 

rabbitmqctl的更多功能可參考官方文檔 http://www.rabbitmq.com/rabbitmqctl.1.man.html,或者自行google:P

 

DIY Demo測試

自己也依葫蘆畫瓢了一個:Dreceive.py#!/usr/bin/env python<br />#coding=utf-8<br />import amqplib.client_0_8 as amqp<br />def showmsg(msg):<br /> print msg.body<br /> msg.channel.basic_ack(msg.delivery_tag)<br /> if msg.body == 'quit':<br /> msg.channel.basic_cancel(msg.consumer_tag)<br />def main():<br /> server = {'host':'localhost', 'userid':'linvo', 'password':'111', 'ssl':False}<br /> x_name = 'x1'<br /> q_name = 'q1'<br /> conn = amqp.Connection( server['host'],<br /> userid=server['userid'],<br /> password=server['password'],<br /> ssl=server['ssl'])<br /> ch = conn.channel()<br /> ch.access_request('/data', active=True, read=True)<br /> ch.exchange_declare(exchange=x_name, type='fanout', durable=True, auto_delete=False)<br /> ch.queue_declare(queue=q_name, durable=True, exclusive=False, auto_delete=False)<br /> ch.queue_bind(queue=q_name, exchange=x_name)<br /> ch.basic_consume(q_name, callback=showmsg)<br /> while ch.callbacks:<br /> ch.wait()<br /> ch.close()<br /> conn.close()<br />if __name__ == '__main__':<br /> main()

 

send.py

#!/usr/bin/env python<br />#coding=utf-8<br />import amqplib.client_0_8 as amqp<br />def main():<br /> server = {'host':'localhost', 'userid':'linvo', 'password':'111', 'ssl':False}<br /> x_name = 'x1'</p><p> conn = amqp.Connection( server['host'],<br /> userid=server['userid'],<br /> password=server['password'],<br /> ssl=server['ssl'])<br /> ch = conn.channel()<br /> ch.access_request('/data', active=True, write=True)<br /> ch.exchange_declare(exchange=x_name, type='fanout', durable=True, auto_delete=False)<br /> retry = True<br /> while retry:<br /> msg_body = raw_input('>')<br /> msg = amqp.Message(msg_body, content_encoding='UTF-8')<br /> msg.properties['delivery_mode'] = 2<br /> ch.basic_publish(msg, x_name)</p><p> if msg_body == 'quit':<br /> retry = False</p><p> ch.close()<br /> conn.close()<br />if __name__ == '__main__':<br /> main()

 

發送訊息

 

接收訊息

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.