Если у меня установлен RabbitMQ на моей машине, существует ли способ создать очередь сообщений из командной строки и привязать ее к определенному обмену без использования клиента?
Я думаю, что это невозможно, но я хочу быть уверенным.
Если у меня установлен RabbitMQ на моей машине, существует ли способ создать очередь сообщений из командной строки и привязать ее к определенному обмену без использования клиента?
Я думаю, что это невозможно, но я хочу быть уверенным.
Установите плагин управления RabbitMQ. Он поставляется с инструментом командной строки, который вы можете использовать для настройки всех ваших очередей/обменов и т.д.
Резюме:
Другие ответы - хорошие альтернативы тому, что было предложено. Ниже приведены команды, которые вы можете использовать из командной строки.
Сначала сделайте всю необходимую подготовительную работу, например. установите кролика, 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
# I know, don't use 777... but it keeps the example simple...
chmod 777 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 ".*" ".*" ".*"
Создать Exchange
./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])
Вышеупомянутый может быть запущен как часть script с использованием python. Обратите внимание: я помещаю исходящий материал в массивы, что позволит вам проходить через них. Это должно облегчить развертывание.
Последние мысли
Я думаю, что вышеизложенное должно заставить вас двигаться в правильном направлении, использовать google, если какие-либо конкретные команды не имеют смысла или больше читаются с помощью rabbitmqadmin help subcommands
. Я пытался использовать переменные, которые объясняют сами. Удачи:)
rabbitmqctl, предоставленный интерфейс командной строки не предоставляет возможности создавать очередь и связывать ее.
Тем не менее, довольно сложно сделать это с быстрым script, но руководство по началу работы с кроликом mq показывает несколько примеров этого, как у издателя, так и у потребителя.#do some work to connect
#do some work to open a channel
channel.queue_declare(queue='helloworld')
Я замалчиваю соединение, но это буквальный один лайнер для создания очереди. Операция также является идемпотентной, то есть вы можете включить оператор в script и быть в безопасности, зная, что он не будет воссоздавать очередь или выдувать существующее одноименное имя.
Если вы используете 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"
Удачи...
Динамически создавать RabbitMq Exchange, Queue и Bindings из CLI в Windows
У меня уже был установлен RabbitMQ Server и работает с несколькими очередями и обменами, и теперь я хочу создать его на лету из командной строки. Я знаю, что это старый вопрос, но я думал, что предоставление этой информации будет полезно.
Вот что я сделал:
Настройка
например: C:\Python26 \ C:\Python26\питон C:\Python26\rabbitmqadmin.exe
Код: в пакетном файле используются следующие команды
Создать обмен:
c:\python26\python.exe rabbitmqadmin.exe объявить имя обмена = ExchangeName1 type = topic durable = true
Создать очередь:
c:\python26\python.exe rabbitmqadmin.exe объявить имя очереди = NameofQueue1 durable = true
Создать привязку:
c:\python26\python.exe rabbitmqadmin.exe объявляет источник привязки = ExchangeName1 destination_type = queue destination = NameofQueue1 routing_key = RoutingKey1
выполнив команду rabbitmqadmin.exe -help, она перечисляет все доступные команды
например: c:\python26\python.exe rabbitmqadmin.exe -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}
Я не мог найти команду командной строки, чтобы сделать это. Вот как я это сделал в коде с java.
версия Rabbitmq-server 3.3.5
на Ubuntu.
Перечислить очереди, пока нет очередей:
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();
}
}
Поставьте файл jar, который поставляется с вашей установкой rabbitmq:
Я использую версию 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.
помогает связать обмен, пока вы на нем:
channel.queue_bind(queueName, exchange)
С -;