RabbitMQ создает очереди и привязки из командной строки

Если у меня установлен RabbitMQ на моей машине, существует ли способ создать очередь сообщений из командной строки и привязать ее к определенному обмену без использования клиента?

Я думаю, что это невозможно, но я хочу быть уверенным.

Ответ 1

Установите плагин управления RabbitMQ. Он поставляется с инструментом командной строки, который вы можете использовать для настройки всех ваших очередей/обменов и т.д.

Ответ 2

Резюме:

Другие ответы - хорошие альтернативы тому, что было предложено. Ниже приведены команды, которые вы можете использовать из командной строки.

Сначала сделайте всю необходимую подготовительную работу, например. установите кролика, 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. Я пытался использовать переменные, которые объясняют сами. Удачи:)

Ответ 3

rabbitmqctl, предоставленный интерфейс командной строки не предоставляет возможности создавать очередь и связывать ее.

Тем не менее, довольно сложно сделать это с быстрым script, но руководство по началу работы с кроликом mq показывает несколько примеров этого, как у издателя, так и у потребителя.
#do some work to connect
#do some work to open a channel
channel.queue_declare(queue='helloworld')

Я замалчиваю соединение, но это буквальный один лайнер для создания очереди. Операция также является идемпотентной, то есть вы можете включить оператор в script и быть в безопасности, зная, что он не будет воссоздавать очередь или выдувать существующее одноименное имя.

Ответ 4

Если вы используете 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"

Удачи...

Ответ 5

Динамически создавать RabbitMq Exchange, Queue и Bindings из CLI в Windows

У меня уже был установлен RabbitMQ Server и работает с несколькими очередями и обменами, и теперь я хочу создать его на лету из командной строки. Я знаю, что это старый вопрос, но я думал, что предоставление этой информации будет полезно.

Вот что я сделал:

Настройка

  • Загрузите и установите Python 2.6.6-201008-24 Windows x86-64 MSI installer, любая версия python больше 2.X, но не 3.X
  • Загрузка RabbitMqAdmin: веб-интерфейс пользователя RabbitMq имеет ссылку Command Line, которая переходит на http://server-name:15672/cli/ (имя сервера: сервер, на котором работает rabbitmq установлен), используйте вышеуказанный URL-адрес и сохраните файл как rabbitmqadmin.exe в месте расположения python exe.

например: 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

Ответ 6

создать 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}

Ответ 7

Пошаговое руководство для создания и удаления очереди в RabbitMQ:

Я не мог найти команду командной строки, чтобы сделать это. Вот как я это сделал в коде с 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.

Ответ 8

помогает связать обмен, пока вы на нем:

channel.queue_bind(queueName, exchange)

С -;