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

Python Rabbitmqの使い方 (4)

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

3 番目の記事では、すでにすべての受信者にメッセージを送信できますが、一部のメッセージを一部の受信者に送信し、一部のメッセージを他の受信者に送信する場合はどうすればよいかについて説明します。 ? ?この場合、ルーティング キーが使用されます。


ルーティングキーの動作原理: 各受信側のメッセージキューがスイッチにバインドされている場合、対応するルーティングキーを設定できます。送信者がスイッチを介して情報を送信する場合、ルーティング キーを指定でき、スイッチはルーティング キーに基づいてメッセージを対応するメッセージ キューに送信し、受信側がメッセージを受信できるようにします。


前の記事に続いて、ルーティングキーの機能をシミュレートするためにsend.pyとreceive.pyを使用します。 send.py は送信側を表し、receive.py は受信側を表します。インスタンスの機能は、情報、警告、エラーの 3 つのレベルの情報をさまざまな受信側に送信することです。


send.pyコード分析


前回の記事と比較すると、主に2つの点が変更されています:

スイッチのタイプ(type)をdirectに設定します。前回の記事では、ブロードキャストを意味するファンアウトに設定し、メッセージはすべての受信者に送信されます。ここでダイレクトに設定すると、設定されたルーティング キーに従ってメッセージが送信されます。
メッセージ送信時に送信するルーティングキーを設定します。

#!/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 コード分析


3 番目の記事と比較すると、主に 3 つの点が変更されています:

スイッチの種類 (タイプ) を direct に設定します。
パラメータを取得するコマンドライン関数を追加します。パラメータはルーティングキーです。
キューをスイッチにバインドするときにルーティング キーを設定します。

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

2 つのターミナルを開き、1 つでコード python accept.py info warning を実行します。これは、情報と警告メッセージのみが受信されることを意味します。別の端末で send.py を実行すると、受信端末が情報と警告メッセージのみを受信することがわかります。複数のターミナルを開いてreceive.pyを実行し、異なるルーティングキーパラメータを渡すと、より明らかな効果が見られます。


受信側の実行中に、rabbitmqctl list_bindings を使用してバインディング ステータスを表示できます。


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


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