Im obigen Artikel geht es um die Arbeitswarteschlange. Jede Nachricht wird nur an einen der Empfänger gesendet. Wenn Sie die Nachricht senden müssen, damit jeder Empfänger sie empfangen kann, müssen Sie einen Schalter verwenden.
Das Funktionsprinzip des Switches: Das Nachrichtensenderende sendet die Nachricht zuerst an den Switch, und der Switch sendet die Nachricht dann an die gebundene Nachrichtenwarteschlange und dann an jede Das empfangende Ende kann Informationen in ihren jeweiligen Nachrichtenwarteschlangen empfangen.
Funktionsprinzip des Rabbitmq-Schalters
Im Folgenden werden send.py und Receive.py verwendet, um die Funktion von zu simulieren den Schalter. send.py repräsentiert das sendende Ende und require.py repräsentiert das empfangende Ende.
Receive.py-Codeanalyse
Im Vergleich zu Receive.py im ersten Artikel werden hauptsächlich zwei Änderungen vorgenommen wurden erstellt:
Definieren Sie den Schalter
Anstatt die Hallo-Warteschlange zu verwenden, wird eine temporäre Warteschlange zufällig generiert und an den Schalter gebunden
#!/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()
Im obigen Beispielcode queue_declare Der Parameter exklusiv = True bedeutet, dass beim Beenden des empfangenden Endes die vorübergehend generierte Warteschlange zerstört wird, sodass keine Ressourcen belegt werden. Führen Sie dieses Programm aus und verwenden Sie dann den Befehl Rabbitmqctl list_exchanges, um die Switch-Informationen anzuzeigen:
rabbitmq Switch Information View
wobei rot Der Rahmen ist der im obigen Beispiel definierte Schalter. Verwenden Sie dann Rabbitmqctl list_queues, um die Nachrichtenwarteschlangensituation zu überprüfen:
Rabbitmq-Warteschlangeninformationsansicht
Das rote Kästchen ist zufällig generierte Nachrichtenwarteschlange.
send.py-Codeanalyse
Im Vergleich zu send.py im ersten Artikel habe ich nur zwei Änderungen vorgenommen :
Definieren Sie den Austausch
Anstatt die Nachricht an die Hallo-Warteschlange zu senden, wird sie an den Austausch gesendet
#!/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()
Im obigen Beispielcode der Parameteraustausch von basic_publish Methode ist festgelegt Für den entsprechenden Switch muss Routing_key nicht festgelegt werden, da er rundgesendet und an alle Warteschlangen gesendet wird.
Wenn Exchange leer ist, bedeutet dies, dass ein anonymer Schalter verwendet wird. Im Bild der Schalterinformationen oben können Sie sehen, dass es einen Schalter wie amq.* gibt. Dies ist der Standardschalter des Systems. Routing_key muss nur angegeben werden, wenn ein anonymer Switch verwendet wird, der angibt, an welche Warteschlange er gesendet wird. Das Beispiel im ersten Artikel demonstriert diese Funktionalität.
Öffnen Sie ein anderes Terminal und führen Sie send.py aus. Sie können beobachten, dass Empfang.py die Nachricht empfangen hat. Wenn mehrere Terminals „receive.py“ ausführen, empfängt jedes „receive.py“ die Nachricht.
Das Obige ist der Inhalt der Verwendung von Python Rabbitmq (3). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!