操作系统:CentOS 6.0
系统内核:linux 2.6.32
Rabbit版本:rabbitmq-3.0.4
参考:http://my.oschina.net/alexwu/blog/71159
1. 安装
(1). 安装erlang 语言环境
安装依赖文件
#yum install ncurses-devel
进入 http://www.erlang.org/download.html 选择源文件下载
wget http://www.erlang.org/download/otp_src_R16B.tar.gz tar zxvf otp_src_R16B.tar.gz cd otp_src_R16B阅读HOTO/INSTALL.md文件
#./configure #make && make install安装完成以后,执行erl看是否能打开eshell,用’halt().’退出,注意后面的点号,那是erlang的结束符。
[lijian@localhost ~]$ erl Erlang R15B01 (erts-5.9.1) [source] [smp:2:2] [async-threads:0] [hipe] [kernel-poll:false] Eshell V5.9.1 (abort with ^G) 1> 2+5. 7 2> halt().
(2).安装RabbitMQ
安装依赖:
安装依赖:
yum install xmlto进入http://www.rabbitmq.com/download.html选择最新的源码包
#wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.0.4/rabbitmq-server-3.0.4.tar.gz #tar zxvf rabbitmq-server-3.0.4.tar.gz #cd rabbitmq-server-3.0.4 #make TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/rabbitmq/sbin MAN_DIR=/usr/local/rabbitmq/man #make TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/rabbitmq/sbin MAN_DIR=/usr/local/rabbitmq/man install
如果修改过hostname,比如测试机的是centos6.local就要修改/etc/hosts,内容:
127.0.0.1 localhost centos6 192.168.1.21 centos6.local
运行rabbitmq:
# /usr/local/rabbitmq/sbin/rabbitmq-server -detached 或者: # /sbin/service rabbitmq-server stop/start/etc.
查看rabbitmq状态:
# /usr/local/rabbitmq/sbin/rabbitmqctl status
关闭rabbitmq:
# /usr/local/rabbitmq/sbin/rabbitmqctl stop
2.python的开发环境搭建
1.安装pika
安装setuptools
到https://pypi.python.org/pypi/setuptools#files选择对应系统版本的setuptools安装包,这里使用setuptools-0.6c11-py2.6.egg (md5)
curl -O https://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5=bfa92100bd772d5a213eedd356d64086 sh setuptools-0.6c11-py2.6.egg
安装pip:
到https://pypi.python.org/packages/source/p/pip/选择最新的版本,这里用pip-1.3.tar.gz
#curl -O https://pypi.python.org/packages/source/p/pip/pip-1.3.tar.gz #tar zxvf pip-1.3.tar.gz #cd pip-1.3 #python setup.py install
安装pika:
#pip install pika 或者: #easy_install pika
3.测试开始
准备下个测试目录,如rabbitmq_app
$ cd $ mkdir -p temp/rabbitmq_app $ cd temp/rabbitmq_app/ $ mkdir tut1 tut2 tut3 tut4 tut5 tut6
2,实例一:来个hello world程序
1
2
3
|
$ cd
tut1 $ vim send.py (代码如下) $ vim receive.py (代码如下)
|
首先是消息发送程序: send.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
#!/usr/bin/env python # -*- coding: utf-8 -*-
import sys
import pika
connection =
pika.BlockingConnection(pika.ConnectionParameters(
'localhost' )) channel =
connection.channel() channel.queue_declare(queue
= 'hello' ) if len
(sys.argv) < 2 : print
'message is empty!' sys.exit(
0 ) message =
sys.argv[ 1 ] channel.basic_publish(exchange
= ' ', routing_key=' hello',
body = message) print " [x] sent:
'" + message + "' \n"
connection.close()
|
跑一下send.py发送一个消息
1
2
3
4
5
6
|
$ python send.py 'Hello
World!' $ python send.py
'你好伍哥' $
/usr/local/rabbitmq/sbin/rabbitmqctl
list_queues Listing queues ... hello 2 ... done
. |
如果你也看到hello队列里面有一个消息的话,就证明可以发消息了。
然后写一个接收消息脚本:receive.py
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/env python # -*- coding: utf-8 -*-
import pika
connection =
pika.BlockingConnection(pika.ConnectionParameters(
'localhost' )) channel =
connection.channel() channel.queue_declare(queue
= 'hello' ) print '[*] Waiting for
messages. To exit press CTRL+C' def callback(ch,
method, properties, body): print
body channel.basic_consume(callback,
queue = 'hello' , no_ack
= True ) channel.start_consuming()
|
其中第12行的 no_ack=True
表示消费完了这个消息以后不主动把完成状态通知rabbitmq。
然后开另外一个shell,执行一下receive.py
1
2
3
4
|
$ python receive.py [*] Waiting for
messages. To exit press CTRL+C Hello World! 你好伍哥 |