rabbitmq学习

rabbitmq学习

rabbitmq是一个好东西,今天按照官网的信息来学习一下。

有两个脚本,一个用来发送信息到queue,一个用来收集信息。

下面这个脚本可以发送一个'Hello World!'到queue中

#!/usr/bin/env python
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()

  

通过在命令行 rabbitmqctl list_queues | grep hello 可以看到:

hello 1

说明hello这个queue有了一个信息

接着执行收信息的脚本

#!/usr/bin/env python
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(callback,
                      queue='hello',
                      no_ack=True)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

可以看到输出把之前我们发送的信息接收了,并且打印出来,这时候hello这个queue应该是空的,

用 rabbitmqctl list_queues | grep hello可以看到

hello 0

说明这个queue已经空了,消息已经被接收出去了

其中有一个no_ack=True的参数,如果为True就表示把queue中的信息读取并且清空queue,如果设置为False,就表示只读取queue的数据,但是不清空队列中的信息。比如设置为了False,收取信息后用命令行 rabbitmqctl list_queues | grep hello查看仍然是hello 1,说明信息仍然在队列中。

当然在连接rabbitmq的时候,也可以远程,把localhost改为ip即可。

参考资料

https://www.rabbitmq.com/tutorials/tutorial-one-python.html

原文地址:https://www.cnblogs.com/juandx/p/5124432.html