測試環境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()
發送訊息
接收訊息