1. 程式人生 > >python采用pika庫使用rabbitmq(二) --工作隊列

python采用pika庫使用rabbitmq(二) --工作隊列

col min pro red exc 理解 需要 color 工作者

技術分享圖片

消息也可以理解為任務,消息發送者可以理解為任務分配者,消息接收者可以理解為工作者,當工作者接收到一個任務,還沒完成的時候,任務分配者又發一個任務過來,那就忙不過來了,於是就需要多個工作者來共同處理這些任務,這些工作者,就稱為工作隊列。

RabbitMQ會默認把p發的消息依次分發給各個消費者(c),跟負載均衡差不多

先啟動消息生產者,然後再分別啟動3個消費者,通過生產者多發送幾條消息,你會發現,這幾條消息會被依次分配到各個消費者身上

技術分享圖片
 1 import pika
 2 import sys
 3 
 4 credentials = pika.PlainCredentials(admin
, passwd) 5 connection = pika.BlockingConnection(pika.ConnectionParameters( 6 ip,credentials=credentials)) 7 channel = connection.channel() 8 9 channel.exchange_declare(exchange=logs,exchange_type=fanout) 10 11 message = .join(sys.argv[1:]) or "info: Hello World!" 12 13 channel.basic_publish(exchange=
logs, 14 routing_key=‘‘, 15 body=message) 16 print(" [x] Sent %r" % message) 17 connection.close()
send.py 技術分享圖片
 1 import pika
 2 
 3 credentials = pika.PlainCredentials(admin, passwd)
 4 connection = pika.BlockingConnection(pika.ConnectionParameters(
 5
ip,credentials=credentials)) 6 channel = connection.channel() 7 8 9 channel.exchange_declare(exchange=logs, exchange_type=fanout) 10 11 result = channel.queue_declare(exclusive=True) # 不指定queue名字,rabbit會隨機分配一個名字,exclusive=True會在使用此queue的消費者斷開後,自動將queue刪除 12 queue_name = result.method.queue 13 14 15 channel.queue_bind(exchange=logs, queue=queue_name) 16 17 print( [*] Waiting for logs. To exit press CTRL+C) 18 19 20 def callback(ch, method, properties, body): 21 print(" [x] %r" % body) 22 23 24 channel.basic_consume(callback, queue=queue_name,no_ack=True) 25 26 channel.start_consuming()
receive.py

python采用pika庫使用rabbitmq(二) --工作隊列