Hello World 测试
实验内容
通过一个程序发送 “Hello world”,另一个程序接受消息并且打印到屏幕上。
生产者(Producer)把消息发送到一个名为 “hello” 的队列中。消费者(Consumer)从这个队列中获取消息。
安装 RabbitMQ 库
RabbitMQ 使用的是 AMQP 协议。要使用 rabbitmq,你需要一个库来解读这个协议。几乎所有的编程语言都有可选择的库。python 也是一样,可以从以下几个库中选择,他们都可以实现 python 与 rabbitmq 的对接:
这次实验我们用 pika 来做演示,通过 pip 来安装:
1 2 3 4 5 6 7 8 9 10 11
| # 更新软件包列表 $ sudo apt-get update
# 安装所需要的依赖 $ sudo apt-get install -y python-pip git-core
# 更新 pip $ sudo pip install --upgrade pip
# 安装 pika $ sudo pip3 install pika
|
发送数据
send
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| import pika
connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost')) channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'") connection.close()
|
获取数据
receive
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| import pika
connection = pika.BlockingConnection(pika.ConnectionParameters( host='localhost')) channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body): print(" [x] Received %r" % body)
channel.basic_consume(queue='hello', auto_ack=True, on_message_callback=callback)
print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()
|
上述代码中我们重复声明了 hello 队列 —— 我们已经在前面的代码中声明过它了。如果我们确定了队列是已经存在的,那么我们可以不这么做,比如此前预先运行了 send 程序。可是我们并不确定哪个程序会首先运行。这种情况下,在程序中重复将队列重复声明一下是种值得推荐的做法.
运行结果:
运行 send 程序:
运行 receive 程序:
成功了!我们已经通过 RabbitMQ 发送第一条消息。你也许已经注意到了,receive.py 程序并没有退出。它一直在准备获取消息,你可以通过 Ctrl + C
来中止它。