1

タイトルのすべて:rabbitmqのドキュメントからの以下のメソッドでは、発行が引数として交換を取ることがわかりますが、消費者はそうではありません。

また、私がそれを行っている間、コンシューマーはパブリッシュqueueと同じですか? routing_keyサブスクライバーがタグのさまざまな正規表現をサブスクライブするように、ルーティングキーはタグのようなものだと思いました

消費するコード:

import pika
def callback(ch, method, properties, body):
   print " [x] Received %r" % (body,)

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_consume(callback, queue='hello', no_ack=True)
channel.start_consuming()

投稿するコード:

import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
connection.close()
4

1 に答える 1

1

RabbitMQ の仕組みについて混乱しています。RabbitMQ では、常にメッセージをExchange. 交換は、メッセージを 1Queueつ (または一連のキュー) にルーティングする論理受信者と同じです。

このルーティングは、 のタイプによって異なりExchangeます。さまざまなタイプがあります: ダイレクト、ファンアウト、トピック、およびヘッダー。を にリンクする方法はExchangeQueueを使用することBindingです。バインディングはルーティング キーまたはいくつかのヘッダーによって定義され、特定の交換から特定のキューにメッセージをルーティングします。

つまり、要約すると、メッセージを にパブリッシュしますExchange。からのメッセージを消費しますQueue。また、 を使用してからにBindingメッセージをルーティングします。とは言っても、消費者が から消費することを言う方法はありません。ExchangeQueueExchange

特定のケースでは、メッセージでルーティング キー 'hello' を使用しています。つまり、メッセージ ('hello') と同じルーティング キーを持つ、呼び出された '' からBinding呼び出された 'hello' への が必要です。名前を変更し、何が起こっているかを確認するために、より便利な名前を付けることをお勧めします。ExchangeQueue

お役に立てれば!

于 2014-01-15T17:20:18.957 に答える