create
credentials = pika.PlainCredentials(username='mq', password='654321')
connection = pika.BlockingConnection(
pika.ConnectionParameters(
host='localhost', port=5672, virtual_host='/',
credentials=credentials
)
)
if connection.is_closed:
print('connection to node failed')
channel = connection.channel()
# create exchange
channel.exchange_declare(
exchange='test',
exchange_type='fanout'
)
# create queue创建队列
channel.queue_declare(queue='test', durable=True)
# queue bind to exchange
channel.queue_bind(exchange='test', queue='test', routing_key='t')
queue_info = requests.get(url='http://localhost:15672/api/queues', auth=('mq', '654321'))
print(queue_info.content.decode())
exchange_info = requests.get(url='http://localhost:15672/api/exchanges', auth=('mq', '654321'))
print(exchange_info.content.decode())
exit()
exit()
queue info队列信息
{
"messages_details":{
"rate":0
},
"messages":0,
"messages_unacknowledged_details":{
"rate":0
},
"messages_unacknowledged":0,
"messages_ready_details":{
"rate":0
},
"messages_ready":0,
"reductions_details":{
"rate":0
},
"reductions":4588,
"node":"mq@he",
"arguments":{
},
"exclusive":false,
"auto_delete":false,
"durable":true,
"vhost":"/",
"name":"test",
"message_bytes_paged_out":0,
"messages_paged_out":0,
"backing_queue_status":{
"mode":"default",
"q1":0,
"q2":0,
"delta":[
"delta",
"undefined",
0,
0,
"undefined"
],
"q3":0,
"q4":0,
"len":0,
"target_ram_count":"infinity",
"next_seq_id":0,
"avg_ingress_rate":0,
"avg_egress_rate":0,
"avg_ack_ingress_rate":0,
"avg_ack_egress_rate":0
},
"head_message_timestamp":null,
"message_bytes_persistent":0,
"message_bytes_ram":0,
"message_bytes_unacknowledged":0,
"message_bytes_ready":0,
"message_bytes":0,
"messages_persistent":0,
"messages_unacknowledged_ram":0,
"messages_ready_ram":0,
"messages_ram":0,
"garbage_collection":{
"minor_gcs":3,
"fullsweep_after":65535,
"min_heap_size":233,
"min_bin_vheap_size":46422,
"max_heap_size":0
},
"state":"running",
"recoverable_slaves":null,
"consumers":0,
"exclusive_consumer_tag":null,
"policy":null,
"consumer_utilisation":null,
"idle_since":"2018-01-24 7:47:07",
"memory":34720
}
exchange info
{
"name":"test",
"vhost":"/",
"type":"fanout",
"durable":false,
"auto_delete":false,
"internal":false,
"arguments":{
}
}
publish message发布消息
# publish message
channel.basic_publish(
routing_key='t', body=json.dumps({'test': 'test'}),
properties=pika.BasicProperties(delivery_mode=2),
exchange='test'
)
receive queue接收消息
# receive queue
def methods(ch, method, properties, body):
print(body)
# ch.basic_ack(delivery_tag=method.delivery_tag)
channel.basic_consume(consumer_callback=methods, queue='test')
channel.start_consuming()
result
b'{"test": "test"}'
set attribute requeue
def methods(ch, method, properties, body):
print(body)
# ch.basic_ack(delivery_tag=method.delivery_tag)
channel.basic_recover(requeue=True)
channel.basic_consume(consumer_callback=methods, queue='test')
channel.start_consuming()
开启多个消费者时,当某个消费者宕了时会把消息分发到其它消费者处理,可以开启多个消费者测试一下