マシンにRabbitMQがインストールされている場合、コマンドラインからメッセージキューを作成し、クライアントを使用せずに特定の交換にバインドする方法はありますか?
それは不可能だと思いますが、確かにしたいです。
RabbitMQ管理プラグイン をインストールします。すべてのキュー/交換/などを構成するために使用できるコマンドラインツールが付属しています。
要約:
他の答えは、求められたものの良い代替案です。以下は、コマンドラインから使用できるコマンドです。
まず、必要な準備作業をすべて行います。 rabbit、rabbitmqadmin
、およびrabbitctl
をインストールします。アイデアは、rabbitmqctl
およびrabbitmqadmin
のコマンドを使用することです。いくつかのコマンドの例を見ることができます: https://www.rabbitmq.com/management-cli.html
コマンド/セットアップの例:
次のコマンドは、必要なもののすべてではないにしても、大部分を提供する必要があります。
# Get the cli and make it available to use.
wget http://127.0.0.1:15672/cli/rabbitmqadmin
chmod +x rabbitmqadmin
mv rabbitmqadmin /etc/rabbitmq
ユーザーと権限を追加します
rabbitmqctl add_user testuser testpassword
rabbitmqctl set_user_tags testuser administrator
rabbitmqctl set_permissions -p / testuser ".*" ".*" ".*"
仮想ホストを作成して権限を設定する
rabbitmqctl add_vhost Some_Virtual_Host
rabbitmqctl set_permissions -p Some_Virtual_Host guest ".*" ".*" ".*"
取引所を作る
./rabbitmqadmin declare exchange --vhost=Some_Virtual_Host name=some_exchange type=direct
キューを作成する
./rabbitmqadmin declare queue --vhost=Some_Virtual_Host name=some_outgoing_queue durable=true
バインディングを作成する
./rabbitmqadmin --vhost="Some_Virtual_Host" declare binding source="some_exchange" destination_type="queue" destination="some_incoming_queue" routing_key="some_routing_key"
Pythonでバインドする代替方法
以下はコマンドラインバインディングの代替です。時々問題が発生し、次のpythonコードの方が信頼性が高いことがわかりました。
#!/usr/bin/env python
import pika
rabbitmq_Host = "127.0.0.1"
rabbitmq_port = 5672
rabbitmq_virtual_Host = "Some_Virtual_Host"
rabbitmq_send_exchange = "some_exchange"
rabbitmq_rcv_exchange = "some_exchange"
rabbitmq_rcv_queue = "some_incoming_queue"
rabbitmq_rcv_key = "some_routing_key"
outgoingRoutingKeys = ["outgoing_routing_key"]
outgoingQueues = ["some_outgoing_queue "]
# The binding area
credentials = pika.PlainCredentials(rabbitmq_user, rabbitmq_password)
connection = pika.BlockingConnection(pika.ConnectionParameters(rabbitmq_Host, rabbitmq_port, rabbitmq_virtual_Host, credentials))
channel = connection.channel()
channel.queue_bind(exchange=rabbitmq_rcv_exchange, queue=rabbitmq_rcv_queue, routing_key=rabbitmq_rcv_key)
for index in range(len(outgoingRoutingKeys)):
channel.queue_bind(exchange=rabbitmq_send_exchange, queue=outgoingQueues[index], routing_key=outgoingRoutingKeys[index])
上記は、Pythonを使用してスクリプトの一部として実行できます。発信のものを配列に入れていることに注意してください。これにより、デプロイが簡単になります。
最後の考え
上記により、正しい方向に進むことができ、特定のコマンドが意味をなさない場合はgoogleを使用するか、rabbitmqadmin help subcommands
。自分自身を説明する変数を使用しようとしました。がんばろう :)
Exchangeの作成:rabbitmqadmin -u {user} -p {password} -V {vhost} declare exchange name={name} type={type}
キューの作成:rabbitmqadmin -u {user} -p {password} -V {vhost} declare queue name={name}
Exchangeへのキューのバインド:rabbitmqadmin -u {user} -p {password} -V {vhost} declare binding source={Exchange} destination={queue}
Linux Debianを使用している場合、「amqp-tools」というパッケージがあります。でインストールする
apt-get install amqp-tools
その後、amqp-publishなどのコマンドラインを使用して、キューにメッセージを送信できます。
amqp-publish -e exchange_name -b "your message"
次に、キューからメッセージを収集できます
amqp-get -q queue_name
または
amqp-consume -q queue_name
rabbitmq-c package/libraryの(コマンドライン)の例もあります。ビルド後、次のようなコマンドラインからメッセージを送信できます。
amqp_sendstring localhost 5672 amq.direct test "hello world"
楽しむ ...
Windows上のCLIからRabbitMq Exchange、Queue、Bindingsを動的に作成します
既にRabbitMQサーバーをインストールし、複数のキューとエクスチェンジを使用して実行していたので、コマンドラインからオンザフライで作成したいと考えました。これは古い質問ですが、この情報を提供することが役立つと思いました。
以下は私がしたことです:
セットアップ
例:C:\ Python26\C:\ Python26\python C:\ Python26\rabbitmqadmin.exe
コード:以下のコマンドを使用するバッチファイル内
交換を作成します。
c:\ python26\python.exe rabbitmqadmin.exeは交換名を宣言します=ExchangeName1type = topic permanent = true
キューを作成します。
c:\ python26\python.exe rabbitmqadmin.exe declare queue name =NameofQueue1permanent = true
バインディングを作成します。
c:\ python26\python.exe rabbitmqadmin.exeバインディングの宣言source = ExchangeName1 destination_type = queue destination =NameofQueue1routing_key =RoutingKey1
rabbitmqadmin.exe -help -subcommandsを実行すると、使用可能なすべてのコマンドがリストされます。
例:c:\ python26\python.exe rabbitmqadmin.exe -help -subcommands
rabbitmqctl、提供されたコマンドラインインターフェイスは、キューを作成してバインドする機能を公開しません。
ただし、簡単なスクリプトを使用してそれを行うのは非常に簡単であり、ウサギmq入門ガイドでは、パブリッシャーとコンシューマー側の両方でその例をいくつか示しています。
#do some work to connect
#do some work to open a channel
channel.queue_declare(queue='helloworld')
私はつなぐことを大事にしていますが、それはキューを作成するための文字通り1つのライナーです。また、この操作はis等です。つまり、ステートメントをスクリプトに含めることができ、キューを再作成したり、同じ名前の既存のものを吹き飛ばしたりしないことを安全に確認できます。
パーティーに少し遅れたかもしれませんが、私はCURLを使用してそうしました。
キューの場合:
curl -i -u RABBITUSER:RABBITPASSWORD -H "content-type:application/json" \
-XPUT -d'{"durable":true}' \
http://192.168.99.100:15672/api/queues/%2f/QUEUENAME
バインディング用
curl -i -u RABBITUSER:RABBITPASSWORD -H "content-type:application/json" \
-XPOST -d"{\"routing_key\":\"QUEUENAME\"}" \
http://192.168.99.100:15672/api/bindings/%2f/e/EXCHANGENAME/q/QUEUENAME
注192.168.99.100:15672はRMQ管理を指します
RabbitMQ Pythonチュートリアル から取られた、より最小限のPythonの例です。
最初に、pikaをインストールします。
Sudo easy_install pika
# (or use pip)
Localhostにメッセージを送信するために必要なのはこれだけです。
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
channel.queue_declare(queue='test-queue')
channel.basic_publish(exchange='', routing_key='test-queue', body='Hello World!')