ホームページ  >  記事  >  バックエンド開発  >  Python Rabbitmqの使い方(3)

Python Rabbitmqの使い方(3)

黄舟
黄舟オリジナル
2017-01-17 14:54:491864ブラウズ

上記の記事では、各メッセージが 1 つの受信者にのみ送信され、すべての受信者が受信できるようにする必要がある場合は、スイッチを使用する必要があります。


スイッチの動作原理: メッセージ送信側は最初にメッセージをスイッチに送信し、次にスイッチはメッセージをバインドされたメッセージキューに送信します。その後、各受信側は独自のメッセージから情報を受信できます。列。

Python Rabbitmqの使い方(3)

rabbitmqスイッチの動作原理


以下では、send.pyとreceive.pyを使用してスイッチの機能をシミュレートします。 send.py は送信側を表し、receive.py は受信側を表します。


receive.py コード分析


最初の記事の accept.py と比較すると、主な変更点が 2 つあります:

スイッチを定義する
hello キューは使用されなくなり、一時的なキューが使用されます。ランダムに生成されたキューをスイッチにバインドする

#!/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()

上記コード例では、queue_declareのパラメータexclusive=Trueは、受信側が終了する際に一時的に生成したキューを破棄し、リソースを占有しないことを意味しています。このプログラムを実行し、rabbitmqctl list_exchanges コマンドを使用してスイッチ情報を表示します。

Python Rabbitmqの使い方(3)

rabbitmq switch information view


赤いボックスは、上の例で定義されたスイッチです。次に、rabbitmqctl list_queues を使用して、メッセージ キューの状況を確認します。

Python Rabbitmqの使い方(3)

rabbitmq キュー情報の表示


赤いボックスは、ランダムに生成されたメッセージ キューです。


send.py コード分析


最初の記事の send.py と比較すると、次の 2 つの変更のみが行われています:

スイッチを定義する
メッセージを hello キューに送信する代わりに、交換局へ

#!/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()

上記サンプルコードでは、basic_publishメソッドのパラメータexchangeに対応する交換局を設定し、全キューにブロードキャスト送信するため、routing_keyの設定は必要ありません。


exchange が空の場合、匿名スイッチが使用されていることを意味します。上のスイッチ情報の図では、システムのデフォルトのスイッチである amq.* のようなスイッチがあることがわかります。 Routing_key は、匿名スイッチを使用する場合にのみ指定する必要があり、どのキューに送信されるかを示します。最初の記事の例では、この機能を示しています。


別のターミナルを開いてsend.pyを実行すると、receive.pyがメッセージを受信したことがわかります。複数の端末がreceive.pyを実行した場合、各receive.pyがメッセージを受信します。

上記は Python Rabbitmq の使い方 (3) の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。