rabbitMQ实战(一)---------使用pika库实现hello world

来源:互联网 发布:淘宝产品拍摄布光图 编辑:程序博客网 时间:2024/04/28 14:42

pika是RabbitMQ团队编写的官方Python AMQP库。


需要先安装pika:

pip3 install pika


有较详细的注释,就不再详细说明了


生产者代码:

hello_world_producer.py:

import pika,sys#connect to the rabbitmq,use the default vhostcredentials = pika.PlainCredentials("guest","guest")conn_params = pika.ConnectionParameters("localhost",                                        credentials=credentials)conn_broker = pika.BlockingConnection(conn_params)#get a channel used to communicate with the rabbitmqchannel = conn_broker.channel()#declare a exchangechannel.exchange_declare(exchange='hello-exchange',                         type='direct',                         passive=False, #if the exchange already existes,report a error.It means we want to declare an exchange.                         durable=True, #durable the message                         auto_delete=False) #if the last consumer is over,do not delete the exchange auto#create a messagemsg = sys.argv[1]msg_props = pika.BasicProperties()msg_props.content_type = "text/plain"#publish the messagechannel.basic_publish(body=msg,                      exchange='hello-exchange',                      properties=msg_props,                      routing_key='hola')
消费者代码
hello_world_consumer.py:
import pika#connect to the rabbitmq,use the default vhostcredentials = pika.PlainCredentials("guest","guest")conn_params = pika.ConnectionParameters("localhost",                                        credentials=credentials)conn_broker = pika.BlockingConnection(conn_params)#get a channel used to communicate with the rabbitmqchannel = conn_broker.channel()#declare a exchangechannel.exchange_declare(exchange='hello-exchange',                         type='direct',                         passive=False, #if the exchange already existes,report a error.It means we want to declare an exchange.                         durable=True, #durable the message                         auto_delete=False) #if the last consumer is over,do not delete the exchange auto#declare a queuechannel.queue_declare(queue="hello-queue")#bind queue to an exchangechannel.queue_bind(queue='hello-queue',                   exchange='hello-exchange',                   routing_key='hola')#define the consumer method to consumer message from a queuedef msg_consumer(channel,method,header,body):    channel.basic_ack(delivery_tag=method.delivery_tag)    if body.decode("ascii") == "quit":        channel.basic_cancel(consumer_tag='hello-consumer')        channel.stop_consuming()    else:        print(body)    return#subscribe messagechannel.basic_consume(msg_consumer,                      queue='hello-queue',                      consumer_tag='hello-consumer')#begin loop until a quit message is sentchannel.start_consuming()

运行代码:
需要先运行consumer,因为我们是在消费者中创建队列的,如果先生产消息,由于没有可以路由到的队列,消息会被丢弃。
$ python hello_world_consumer.pyb'good'b'hello world'
$ python hello_world_producer.py "good"$ python hello_world_producer.py "hello world"
$ python hello_world_producer.py "quit"


0 0
原创粉丝点击