如果我的机器上安装了RabbitMQ,是否有办法从命令行创建消息队列并将其绑定到某个交换机而不使用客户端?
我认为这是不可能的,但我想确定。
答案 0 :(得分:89)
<强>要点:强>
其他答案是要求的好方法。以下是可以从命令行使用的命令。
首先,做所有必要的准备工作,例如安装兔子,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的脚本的一部分运行。请注意,我将传出的东西放入数组,这将允许您迭代它们。这样可以简化部署。
最后的想法
我认为以上内容应该让您朝着正确的方向前进,如果任何特定命令没有意义或使用rabbitmqadmin help subcommands
阅读更多内容,请使用Google。我试图使用解释自己的变量。祝你好运:)
答案 1 :(得分:23)
安装RabbitMQ management plugin。它带有一个命令行工具,您可以使用它来配置所有队列/交换/等。
答案 2 :(得分:5)
创建Exchange:
cshtml
创建一个队列:
rabbitmqadmin -u {user} -p {password} -V {vhost} declare exchange name={name} type={type}
将队列绑定到Exchange:
rabbitmqadmin -u {user} -p {password} -V {vhost} declare queue name={name}
答案 3 :(得分:3)
如果你使用的是Linux Debian,那么有一个名为&#34; amqp-tools&#34;的软件包。用
安装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包/库中也有(命令行)示例。构建它之后,您可以通过命令行发送消息,例如
amqp_sendstring localhost 5672 amq.direct test "hello world"
玩得开心......
答案 4 :(得分:2)
rabbitmqctl,提供的命令行界面不会公开创建队列并绑定它的能力。
然而,使用快速脚本完成它是非常简单的,并且兔子mq入门指南显示了它的几个例子,无论是在发布者还是消费者方面。
#do some work to connect
#do some work to open a channel
channel.queue_declare(queue='helloworld')
我正在考虑连接,但是创建一个队列是一个文字的衬里。该操作也是幂等的,这意味着您可以将该语句包含在脚本中并且安全地知道它不会继续重新创建队列或者吹出现有的队列。
答案 5 :(得分:2)
从Windows上的CLI动态创建RabbitMq Exchange,队列和绑定
我已经安装了RabbitMQ服务器并运行了多个队列和交换,现在想要从命令行动态创建它。我知道这是一个老问题,但我认为发布这些信息会有所帮助。
以下是我的所作所为:
设置
例如:C:\ Python26 \ C:\ Python26 \ python的 C:\ Python26 \ rabbitmqadmin.exe
代码:在批处理文件中使用以下命令
创建交流:
c:\ python26 \ python.exe rabbitmqadmin.exe声明交换名称= ExchangeName1 type = topic durable = true
创建队列:
c:\ python26 \ python.exe rabbitmqadmin.exe声明队列名称= NameofQueue1 耐用= true
创建绑定:
c:\ python26 \ python.exe rabbitmqadmin.exe声明绑定源= ExchangeName1 destination_type = queue destination = NameofQueue1 routing_key = RoutingKey1
通过执行rabbitmqadmin.exe -help -subcommands,它列出了所有可用的命令
例如:c:\ python26 \ python.exe rabbitmqadmin.exe -help -subcommands
答案 6 :(得分:2)
也许聚会晚了一点,但是我已经使用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管理
答案 7 :(得分:0)
这是一个更小的Python示例,取自RabbitMQ Python tutorial。
首先,安装pika:
sudo easy_install pika
# (or use pip)
这是向本地主机发送消息所需的全部内容
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!')
答案 8 :(得分:0)
对我来说,我的RabbitMQ Management交易一直试图重定向到https版本...设置中的所有内容都是原始的,我什至没有配置文件...无论如何,我的解决方法是手动创建{ rabbitmqadmin.py
文件夹中的{1}},然后用https://raw.githubusercontent.com/rabbitmq/rabbitmq-management/v3.8.1/bin/rabbitmqadmin
然后,确保sbin
中有python
并运行它以例如添加交易所:
PATH
答案 9 :(得分:-1)
我无法找到命令行命令来执行此操作。这是我用java编写的代码。
Ubuntu上的Rabbitmq-server版本3.3.5
。
列出队列,没有队列:
sudo rabbitmqctl list_queues
[sudo] password for eric:
Listing queues ...
...done.
将此内容放入CreateQueue.java
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.Channel;
import java.util.*;
public class CreateQueue {
public static void main(String[] argv) throws Exception {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
Map<String, Object> args = new HashMap<String, Object>();
args.put("x-message-ttl", 60000);
channel.queueDeclare("kowalski", false, false, false, args);
channel.close();
connection.close();
}
}
提供rabbitmq安装附带的jar文件:
我使用的是rabbitmq-client.jar 0.9.1版本,请使用您的rabbitmq版本附带的版本。
编译并运行:
javac -cp .:rabbitmq-client.jar CreateQueue.java
java -cp .:rabbitmq-client.jar CreateQueue
它应该没有错误地完成,现在检查你的队列:
sudo rabbitmqctl list_queues
Listing queues ...
kowalski 0
...done.
kowalski队列存在。
答案 10 :(得分:-2)
有助于在您交换时绑定交易所:
channel.queue_bind(queueName, exchange)
Ç - ;