5

私はcentos5.6でrabbitmq-cに接続し、次のWebサイトの手順に従ってcクライアントでその機能をテストしようとしています:http ://www.rabbitmq.com/tutorials/tutorial-one-java.html 。ただし、デフォルトの交換を使用すると失敗します。

たとえば、「(AMQPdefault)」という名前のデフォルトの交換を介して「myqueue」という名前のキューに「Helloworld」というメッセージを送信したいとします。

Javaでは、次のコードがあります。

channel.basicPublish("", QUEUE_NAME, null, message.getBytes());

しかし、cでは、 https://github.com/liuhaobupt/rabbitmq_work_queues_demo-with-rabbit-c-client-libの例としてrmq_new_task.c(amqp_sendstring.cとほぼ同じ)を実行すると。

queuename="myqueue";
......
die_on_error(amqp_basic_publish(conn, amqp_cstring_bytes(exchange),
    amqp_cstring_bytes(routingkey), &props, amqp_cstring_bytes("Hello world")),
    "Publishing");

Javaクライアントでは、パラメータ「exchange」を「」に設定して、デフォルトの交換を介してroutingkeyと同じ名前の指定されたキューにメッセージを送信することをサーバーに通知します。

では、(デフォルトの交換を使用して)cクライアントで2番目のパラメーター「exchange」にどのような値を指定する必要がありますか?「」または「amq.direct」に設定してみました。実行中にエラーは表示されず、正常に機能しているように見えました。

しかし、rabbitmq-management(http:// localhost:55672 /#/ queues)をチェックインしたとき、「myqueue」という名前のキューは存在しませんでした。

誰かが私を正しい方向に向けてくれませんか?本当にありがたいです!

4

1 に答える 1

7

http://www.rabbitmq.com/tutorials/amqp-concepts.htmlを見て、特にDefaultExchangeというタイトルのセクションを探してください。

デフォルトの交換の使用法は非常に簡単です。

Javaでは次のようにします。

channel.basicPublish("", "hello", null, message.getBytes());

で指定することにより""、デフォルトの交換を使用します。(使用する必要はありませんamq.direct

上記の記事によると、それは述べています:

デフォルトの交換は、ブローカーによって事前に宣言された名前(空の文字列)のない直接交換です。単純なアプリケーションに非常に役立つ特別なプロパティが1つあります。作成されるすべてのキューは、キュー名と同じルーティングキーで自動的にバインドされます

つまり、デフォルトのエクスチェンジへの公開は、公開先のキューをすでに作成している場合にのみ機能します。

したがって、デフォルトの取引所に公開する前に、キューを作成する必要があります。それが完了すると、メッセージが表示されるようになります。

于 2012-12-05T10:23:37.877 に答える