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