Der dritte Artikel erläutert die Verwendung von Schaltern. Es können jedoch Nachrichten an alle Empfänger gesendet werden. Wenn Sie jedoch eine freie Anpassung benötigen, werden einige Nachrichten an andere Empfänger gesendet Ich mache? Was tun? In diesem Fall werden Routing-Schlüssel verwendet.
Das Funktionsprinzip des Routing-Schlüssels: Wenn die Nachrichtenwarteschlange jedes Empfangsendes an den Switch gebunden ist, kann der entsprechende Routing-Schlüssel festgelegt werden. Wenn der Absender Informationen über den Switch sendet, kann er den Routing-Schlüssel angeben, und der Switch sendet die Nachricht basierend auf dem Routing-Schlüssel an die entsprechende Nachrichtenwarteschlange, sodass der Empfänger die Nachricht empfangen kann.
Nach dem vorherigen Artikel verwenden wir weiterhin send.py undempfangen.py, um die Funktion von Routing-Schlüsseln zu simulieren. send.py repräsentiert das sendende Ende und require.py repräsentiert das empfangende Ende. Die Funktion der Instanz besteht darin, drei Informationsebenen zu senden: Info, Warnung und Fehler an verschiedene Empfänger.
send.py-Codeanalyse
Im Vergleich zum vorherigen Artikel betreffen die Änderungen hauptsächlich zwei Aspekte:
Stellen Sie den Schaltertyp auf Direkt ein. Der vorherige Artikel wurde auf „Fanout“ eingestellt, was bedeutet, dass die Nachricht an alle Empfänger gesendet wird. Hier bedeutet die Einstellung „Direkt“, dass die Nachricht gemäß dem festgelegten Routing-Schlüssel gesendet wird.
Legen Sie den Routing-Schlüssel beim Senden von Informationen fest.
#!/usr/bin/env python #coding=utf8 import pika connection= pika.BlockingConnection(pika.ConnectionParameters( 'localhost')) channel= connection.channel() #定义交换机,设置类型为direct channel.exchange_declare(exchange='messages',type='direct') #定义三个路由键 routings= ['info','warning','error'] #将消息依次发送到交换机,并设置路由键 for routingin routings: message= '%s message.' % routing channel.basic_publish(exchange='messages', routing_key=routing, body=message) print message connection.close()
Receive.py-Codeanalyse
Im Vergleich zum dritten Artikel bestehen die Änderungen hauptsächlich in drei Aspekten:
Eingestellt der Schaltertyp (Typ) auf direkt.
Fügen Sie die Befehlszeilenfunktion hinzu, um Parameter abzurufen, und die Parameter sind Routing-Schlüssel.
Legen Sie den Routing-Schlüssel fest, wenn Sie die Warteschlange an den Switch binden.
#!/usr/bin/env python #coding=utf8 import pika, sys connection= pika.BlockingConnection(pika.ConnectionParameters( 'localhost')) channel= connection.channel() #定义交换机,设置类型为direct channel.exchange_declare(exchange='messages',type='direct') #从命令行获取路由键参数,如果没有,则设置为info routings= sys.argv[1:] if not routings: routings= ['info'] #生成临时队列,并绑定到交换机上,设置路由键 result= channel.queue_declare(exclusive=True) queue_name= result.method.queue for routingin routings: channel.queue_bind(exchange='messages', queue=queue_name, routing_key=routing) 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()
Öffnen Sie zwei Terminals, eines führt den Code python retain.py info warning aus, was bedeutet, dass nur Info- und Warnmeldungen empfangen werden. Führen Sie send.py auf einem anderen Terminal aus und Sie können beobachten, dass das empfangende Terminal nur Info- und Warnmeldungen empfängt. Wenn Sie mehrere Terminals öffnen und „receive.py“ ausführen und verschiedene Routing-Schlüsselparameter übergeben, können Sie offensichtlichere Auswirkungen sehen.
Wenn die Empfangsseite läuft, können Sie Rabbitmqctl list_bindings verwenden, um den Bindungsstatus anzuzeigen.
Das Obige ist der Inhalt der Verwendung von Python Rabbitmq (4). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!