ハロー・ワールド
入門
RabbitMQのメッセージブローカーがある:それは受信して、情報を転送します。たとえば:暁明は、淘宝網から商品を購入するために、宅配便のスタッフがキャビネットを表現するためにお届けします、暁明は、コードに応じて配信宅配便ピックアップを取るためにキャビネットに行きます。エクスプレスキャビネットは、メッセージキューに相当し、宅配便はプロデューサー、暁明の消費者があります。
-
プロデューサーは、送信が、プログラムは情報の生産者(プロデューサー)を送ることを意味します。
-
彼らは唯一の専用メモリとディスクの制限およびホストの制約によってキューAのキューに格納することができRabbitMQのとアプリケーションを流れるメッセージのうちものの、しかし、それは基本的に大きなメッセージバッファです。多くの生産者が同じキューにメッセージを送信することができ、多くの消費者は、キューからの道を表すキューデータを受信しようとすることができます。
-
消費と同様の意味を受けます。消費者は、主に情報を受け取るために待っているプログラムです。
生産者、消費者、メッセージキューは、同じホスト上に配置する必要はありません。アプリケーションは、両方の消費者と生産者がかもしれすることができます。
こんにちは世界
このセクションでは、生産者と消費者の両方を達成するために、それぞれ、Pythonで書かれた二つの小さなプログラムを使用します。プロデューサーのデータ伝送、消費者データ受信し、それをプリントアウト。
示されるように、Pがプロデューサー、赤い四角形は、メッセージキュー、Cコンシューマに等しいです。プロデューサーhello
キューに送られたが、消費者は、キューから受け取りますhello
。
RabbitMQのライブラリ
さまざまなプロトコルを使用してのRabbitMQ。このチュートリアルでは、オープンユニバーサルメッセージングプロトコルであるAMQP 0-9-1を、使用しています。RabbitMQのがあり、多くの異なる言語のある顧客。このチュートリアルシリーズでは、我々は、使用するピカ1.0.0のRabbitMQチームは、Pythonクライアントをお勧めしています、。それをインストールするには、使用することができピップインストールされているパッケージ管理ツールを:
python -m pip install pika --upgrade
送信
- 私たちの最初のプログラムは、
send.py
キューにメッセージを送信する必要があります。最初に行うべきことは、RabbitMQのサーバとの接続を確立しています。あなたがインストールされていることを前提がRabbitMQ
まだインストールされていない場合、私はこのブログを参照することができドッカーがRabbitMQのをインストールし使用します。
from pika import BlockingConnection, ConnectionParameters
# RabbitMQ连接参数,基本有默认值
parameters = ConnectionParameters(
host='localhost',
# port=_DEFAULT,
# virtual_host=_DEFAULT,
# credentials=_DEFAULT,
# channel_max=_DEFAULT,
# frame_max=_DEFAULT,
# heartbeat=_DEFAULT,
# ssl_options=_DEFAULT,
# connection_attempts=_DEFAULT,
# retry_delay=_DEFAULT,
# socket_timeout=_DEFAULT,
# stack_timeout=_DEFAULT,
# locale=_DEFAULT,
# blocked_connection_timeout=_DEFAULT,
# client_properties=_DEFAULT,
# tcp_options=_DEFAULT,
)
connection = BlockingConnection(parameters=parameters)
channel = connection.channel()
-
次に、送信する前に、私たちは、あなたが存在しない場所にメッセージを送信する場合、RabbitMQのはメッセージのみを削除します、受信者のキューが存在することを確認する必要があります。作成
hello
キューメッセージング情報を:channel.queue_declare(queue='hello')
-
この時点で、メッセージを送信する準備ができました。最初のメッセージは、文字列である
Hello World!
に送信されhello
たキュー。RabbitMQのでは、キューに直接メッセージを送ることができることはありません、それは常にこのチュートリアルででき、交換する必要のあるセクションをパブリッシュ/サブスクライブ関連情報を読み取るために。今、私たちは私たちが正確にどのキューを指定するための情報を送ることができるように、デフォルト・スワップのために、この特定の交換を空の文字列を使用する方法を知っておく必要があります。キュー名は、する必要が
routing_key
パラメータを指定します。channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print('已发送: Hello World!')
-
キャッシュを更新するために、ネットワーク接続を閉じて:
connection.close()
レセプション
-
2番目のプログラムは、
receive.py
キューからメッセージを受信し、それをプリントアウトします。 -
また、接続するために必要な
RabbitMQ
接続を担当するサーバーRabbitMQ
のコードを、前のコードと同じです。 -
同様に
send.py
、のような、キューが使用するために存在することを確認する必要がありqueue_declare
キューを作成することが冪等で、必要に応じて何度でもこのコマンドを使用することができますが、一つだけを作成します。channel.queue_declare(queue='hello')
で
send.py
そのキューを宣言し、あなたが実際に声明を持っていないことができる場所、実行しているが、与えられたプログラムを実行するための不確実性を、それが二つのプログラムで文を繰り返しするのが最善です。 -
メッセージキュー内のメッセージの数を、見る
linux
:次の缶rabbitmqctl list_queues
を通じて、ビューにウィンドウをコマンドをrabbitmqctl.bat list_queues
表示します。あなたがインストールする場合はweb
、コンソールを、あなたは後にログオンするために切り替えることができますQueues
参照してください次のタブ。 -
我々が設定し、受信したメッセージキューのコールバックメッセージハンドラ、コールバック関数によって操作されるように少し複雑よりメッセージを受信したニュース。
def callback(ch, method, properties, body): """ :param ch: :param method: :param properties: :param body: :return: """ print("收到消息: {}".format(body))
-
次に、あなたはキューを伝え、どのキューからメッセージを受信するコールバック関数を指定する必要があります。
channel.basic_consume(queue='hello',
auto_ack=True,
on_message_callback=callback)
-
必要に応じてデータ及びコールバックを待機する無限ループに入る最後。
print('等待接收消息, 按CTRL+C退出....') channel.start_consuming()
コードの統合
send.py
from pika import BlockingConnection, ConnectionParameters
# RabbitMQ连接参数,基本有默认值
parameters = ConnectionParameters(
host='localhost',
# port=_DEFAULT,
# virtual_host=_DEFAULT,
# credentials=_DEFAULT,
# channel_max=_DEFAULT,
# frame_max=_DEFAULT,
# heartbeat=_DEFAULT,
# ssl_options=_DEFAULT,
# connection_attempts=_DEFAULT,
# retry_delay=_DEFAULT,
# socket_timeout=_DEFAULT,
# stack_timeout=_DEFAULT,
# locale=_DEFAULT,
# blocked_connection_timeout=_DEFAULT,
# client_properties=_DEFAULT,
# tcp_options=_DEFAULT,
)
connection = BlockingConnection(parameters=parameters)
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print('已发送: Hello World!')
connection.close()
receive.py
from pika import BlockingConnection, ConnectionParameters
# RabbitMQ连接参数,基本有默认值
parameters = ConnectionParameters(
host='localhost',
# port=_DEFAULT,
# virtual_host=_DEFAULT,
# credentials=_DEFAULT,
# channel_max=_DEFAULT,
# frame_max=_DEFAULT,
# heartbeat=_DEFAULT,
# ssl_options=_DEFAULT,
# connection_attempts=_DEFAULT,
# retry_delay=_DEFAULT,
# socket_timeout=_DEFAULT,
# stack_timeout=_DEFAULT,
# locale=_DEFAULT,
# blocked_connection_timeout=_DEFAULT,
# client_properties=_DEFAULT,
# tcp_options=_DEFAULT,
)
connection = BlockingConnection(parameters=parameters)
channel = connection.channel()
channel.queue_declare(queue='hello')
def callback(ch, method, properties, body):
"""
:param ch:
:param method:
:param properties:
:param body:
:return:
"""
print("收到消息: {}".format(body))
channel.basic_consume(queue='hello',
auto_ack=True,
on_message_callback=callback)
print('等待接收消息, 按CTRL+C退出....')
channel.start_consuming()
-
するために
python send.py
メッセージ、コンソール出力を送信します。已发送: Hello World!
-
次に
python receive.py
、コンソールを終了することはありません見つけます。等待接收消息, 按CTRL+C退出.... 收到消息: b'Hello World!'
-
ここでも
python send.py
、手紙は再び出力、関数と呼ばれますb'Hello World!'
。