RabbitMQ从命令行创建队列和绑定

Fan*_*oos 61 rabbitmq

如果我在我的机器上安装了RabbitMQ,是否有办法从命令行创建消息队列并将其绑定到某个交换而不使用客户端?

我认为这是不可能的,但我想确定.

Jam*_*vec 95

摘要:

其他答案是要求的好方法.以下是可以从命令行使用的命令.

首先,做所有必要的准备工作,例如安装兔子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
Run Code Online (Sandbox Code Playgroud)

添加用户和权限

rabbitmqctl add_user testuser testpassword
rabbitmqctl set_user_tags testuser administrator
rabbitmqctl set_permissions -p / testuser ".*" ".*" ".*"
Run Code Online (Sandbox Code Playgroud)

创建虚拟主机并设置权限

rabbitmqctl add_vhost Some_Virtual_Host
rabbitmqctl set_permissions -p Some_Virtual_Host guest ".*" ".*" ".*"
Run Code Online (Sandbox Code Playgroud)

进行交流

./rabbitmqadmin declare exchange --vhost=Some_Virtual_Host name=some_exchange type=direct
Run Code Online (Sandbox Code Playgroud)

建立一个队列

./rabbitmqadmin declare queue --vhost=Some_Virtual_Host name=some_outgoing_queue durable=true
Run Code Online (Sandbox Code Playgroud)

做一个绑定

./rabbitmqadmin --vhost="Some_Virtual_Host" declare binding source="some_exchange" destination_type="queue" destination="some_incoming_queue" routing_key="some_routing_key"
Run Code Online (Sandbox Code Playgroud)

用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])
Run Code Online (Sandbox Code Playgroud)

以上可以使用python作为脚本的一部分运行.请注意,我将传出的东西放入数组,这将允许您迭代它们.这应该使部署变得容易.

最后的想法

我认为以上应该让你朝着正确的方向前进,如果任何特定命令没有意义或者阅读更多,请使用谷歌rabbitmqadmin help subcommands.我试图使用解释自己的变量.祝好运 :)


OJ.*_*OJ. 26

安装RabbitMQ管理插件.它附带一个命令行工具,您可以使用它来配置所有队列/交换/等.

  • 您可以对此进行扩展吗?访问该页面不会显示您所描述的内容。您在谈论`load_definitions`变量和相应的文件吗?还是将HTTP API与`curl`一起使用的描述?我希望比手动构建http reqs更加用户友好。 (3认同)
  • 要回答我自己的问题,请在命令行上使用 `rabbitmqadmin`。`rabbitmqadmin help subcommands` 似乎是最好的文档。 (2认同)

小智 7

创建一个交易所: 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}


use*_*od2 6

也许参加聚会有点晚了,但我已经使用 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
Run Code Online (Sandbox Code Playgroud)

和绑定

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
Run Code Online (Sandbox Code Playgroud)

Note 192.168.99.100:15672 指向我的 RMQ 管理


小智 5

如果您使用的是Linux Debian,则有一个名为“ amqp-tools”的软件包。用安装

apt-get install amqp-tools
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用命令行(例如amqp-publish)将消息发送到队列中

amqp-publish -e exchange_name -b "your message"
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令从队列中收集消息

amqp-get -q queue_name
Run Code Online (Sandbox Code Playgroud)

要么

amqp-consume -q queue_name
Run Code Online (Sandbox Code Playgroud)

也有来自Rabbitmq-c软件包/库的(命令行)示例。构建后,您可以通过命令行发送消息,例如

amqp_sendstring localhost 5672 amq.direct test "hello world"
Run Code Online (Sandbox Code Playgroud)

玩得开心 ...