Home > Backend Development > Python Tutorial > Use of Python rabbitmq (3)

Use of Python rabbitmq (3)

黄舟
Release: 2017-01-17 14:54:49
Original
1885 people have browsed it

The above article talked about the work queue. Each message will only be sent to one of the receivers. If the message needs to be broadcast so that every receiver can receive it, then a switch must be used.


The working principle of the switch: The message sending end first sends the message to the switch, and the switch then sends the message to the bound message queue, and then each receiving end can Information is received in their respective message queues.

Use of Python rabbitmq (3)

Working principle of rabbitmq switch


The following uses send.py and receive.py to simulate the function of the switch. send.py represents the sending end, and receive.py represents the receiving end.


receive.py code analysis


Compared with receive.py in the first article, it mainly does Two changes have been made:

Define the switch
Instead of using the hello queue, a temporary queue is randomly generated and bound to the switch

#!/usr/bin/env python
#coding=utf8
import pika
connection= pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel= connection.channel()
#定义交换机
channel.exchange_declare(exchange='messages',type='fanout')
#随机生成队列,并绑定到交换机上
result= channel.queue_declare(exclusive=True)
queue_name= result.method.queue
channel.queue_bind(exchange='messages', queue=queue_name)
def callback(ch, method, properties, body):
print " [x] Received %r" % (body,)
channel.basic_consume(callback, queue=queue_name, no_ack=True)
print ' [*] Waiting for messages. To exit press CTRL+C'
channel.start_consuming()
Copy after login

In the above example code, the parameter of queue_declare is exclusive =True means that when the receiving end exits, the temporarily generated queue is destroyed so that resources will not be occupied. Run this program, and then use the rabbitmqctl list_exchanges command to view the switch information:

Use of Python rabbitmq (3)

rabbitmq switch information view


where red The frame is the switch defined in the above example. Then use rabbitmqctl list_queues to check the message queue situation:

Use of Python rabbitmq (3)

rabbitmq queue information view


The red box is randomly generated message queue.


send.py code analysis


Compared with send.py in the first article, I only did Two changes:

Define the switch
Instead of sending the message to the hello queue, it is sent to the switch

#!/usr/bin/env python
#coding=utf8
import pika
connection= pika.BlockingConnection(pika.ConnectionParameters(
'localhost'))
channel= connection.channel()
#定义交换机
channel.exchange_declare(exchange='messages',type='fanout')
#将消息发送到交换机
channel.basic_publish(exchange='messages', routing_key='', body='Hello World!')
print " [x] Sent 'Hello World!'"
connection.close()
Copy after login

In the above example code, the parameter exchange of the basic_publish method is set to the corresponding The switch needs to broadcast and send it to all queues, so routing_key does not need to be set.


If exchange is empty, it means an anonymous switch is used. In the picture of the switch information above, you can see that there is a switch like amq.*, which is the system default switch. . Routing_key only needs to be specified when using an anonymous switch, indicating which queue it is sent to. The example in the first article demonstrates this functionality.


Open another terminal and execute send.py. You can observe that receive.py has received the message. If multiple terminals execute receive.py, each receive.py will receive the message.

The above is the content of using Python rabbitmq (3). For more related content, please pay attention to the PHP Chinese website (m.sbmmt.com)!


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template