RabbitMQ tworzenie kolejek i wiązań z wiersza poleceń

Jeśli mam zainstalowany RabbitMQ na moim komputerze, czy istnieje sposób, aby utworzyć kolejkę komunikatów z wiersza poleceń i powiązać ją z określonym exchange bez użycia klienta?

Myślę, że to niemożliwe, ale chcę mieć pewność.

 76
Author: Pang, 2010-12-28

11 answers

Zainstaluj wtyczkę RabbitMQ management Plugin . Jest wyposażony w narzędzie wiersza poleceń, którego możesz użyć do skonfigurowania wszystkich kolejek/giełd / itp.

 30
Author: OJ.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-04-28 23:15:50

Podsumowanie:

Inne odpowiedzi są dobrą alternatywą dla tego, o co poproszono. Poniżej znajdują się polecenia, których możesz użyć z linii poleceń.

Najpierw wykonaj wszystkie niezbędne prace przygotowawcze, np. zainstaluj rabbit, rabbitmqadmin i rabbitctl. Chodzi o użycie komend z rabbitmqctl i rabbitmqadmin. Możesz zobaczyć kilka przykładów poleceń: https://www.rabbitmq.com/management-cli.html

Przykładowe Polecenia / Konfiguracja:

Poniższe polecenia powinny dać ci większość, jeśli nie wszystko, czego potrzebujesz:

# 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

Dodaj użytkownika i uprawnienia

rabbitmqctl add_user testuser testpassword
rabbitmqctl set_user_tags testuser administrator
rabbitmqctl set_permissions -p / testuser ".*" ".*" ".*"

Utwórz wirtualny host i ustaw uprawnienia

rabbitmqctl add_vhost Some_Virtual_Host
rabbitmqctl set_permissions -p Some_Virtual_Host guest ".*" ".*" ".*"

Dokonaj wymiany

./rabbitmqadmin declare exchange --vhost=Some_Virtual_Host name=some_exchange type=direct

Stwórz kolejkę

./rabbitmqadmin declare queue --vhost=Some_Virtual_Host name=some_outgoing_queue durable=true

Utwórz oprawę

./rabbitmqadmin --vhost="Some_Virtual_Host" declare binding source="some_exchange" destination_type="queue" destination="some_incoming_queue" routing_key="some_routing_key"

Alternatywny sposób wiązania z Pythonem

Poniżej znajduje się alternatywa dla wiązania wiersza poleceń, ponieważ czasami miałem z tym problemy i znalazłem podążanie za kodem Pythona, aby być bardziej niezawodnym.

#!/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])

Powyższe może być uruchamiane jako część skryptu przy użyciu Pythona. Zauważ, że umieszczam wychodzące rzeczy w tablicach, które pozwolą ci na iterację przez nie. Powinno to ułatwić wdrażanie.

Ostatnie Myśli

Myślę, że powyższe powinno cię poruszyć we właściwym kierunku, użyj google, jeśli jakieś konkretne polecenia nie mają sensu lub Czytaj więcej z rabbitmqadmin help subcommands. Próbowałem użyć zmiennych, które same się wyjaśniają. Powodzenia:)

 118
Author: James Oravec,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-09 08:44:03

Create Exchange:

rabbitmqadmin -u {user} -p {password} -V {vhost} declare exchange name={name} type={type}

Utwórz Kolejkę:

rabbitmqadmin -u {user} -p {password} -V {vhost} declare queue name={name}

Kolejka Bind do wymiany:

rabbitmqadmin -u {user} -p {password} -V {vhost} declare binding source={Exchange} destination={queue}
 8
Author: Kaushal Dontula,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-28 06:40:11

Jeśli używasz Linuksa Debian, istnieje pakiet o nazwie "AMQP-tools". Zainstaluj go za pomocą

apt-get install amqp-tools

Możesz następnie użyć wiersza poleceń, takiego jak amqp-publish, aby wysyłać wiadomości do kolejki

amqp-publish -e exchange_name -b "your message"

Następnie możesz zbierać wiadomości z kolejki za pomocą

amqp-get -q queue_name

Lub

amqp-consume -q queue_name

Istnieją również przykłady (wiersz poleceń) z rabbitmq-C pakiet / biblioteka. Po zbudowaniu można wysyłać wiadomości za pomocą linii poleceń, takich jak

amqp_sendstring localhost 5672 amq.direct test "hello world"
Baw się dobrze ...
 5
Author: rahard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-27 15:13:37

Może trochę późno na imprezę, ale zrobiłem to za pomocą CURL.

Dla kolejek:

curl -i -u RABBITUSER:RABBITPASSWORD -H "content-type:application/json" \
-XPUT -d'{"durable":true}' \
http://192.168.99.100:15672/api/queues/%2f/QUEUENAME

I do wiązań

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

Uwaga 192.168.99.100: 15672 punkty do mojego zarządzania RMQ

 5
Author: userMod2,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-11-07 03:58:16

Tworzenie dynamicznej wymiany, kolejki i wiązań RabbitMq z CLI w systemie Windows

Miałem już zainstalowany serwer RabbitMQ, działający z wieloma kolejkami i exchange, a teraz chciałem go utworzyć w locie z wiersza poleceń. Wiem, że to stare pytanie, ale myślałem, że podanie tych informacji będzie pomocne.

Oto co zrobiłem:

Setup

  1. pobrany i zainstalowany Python 2.6.6-201008-24 Windows x86-64 instalator MSI, dowolny wersja Pythona większa niż 2.X, ale nie 3.X
  2. Pobierz RabbitMqAdmin: internetowy interfejs użytkownika RabbitMq posiada linię poleceń, która przechodzi do http://server-name:15672/cli/ (nazwa serwera: serwer, na którym zainstalowany jest rabbitmq) alternatywnie , użyj powyższego adresu url i zapisz plik jako rabbitmqadmin.exe in the python exe location

Eg: C:\Python26\ C:\Python26\python C:\Python26\rabbitmqadmin.exe

Kod: w pliku wsadowym użyłem poniższych poleceń

  1. Create exchange:

    C:\python26\python.exe rabbitmqadmin.exe declare exchange name= ExchangeName1 type = topic = true

  2. Utwórz kolejkę:

    C:\python26\python.exe rabbitmqadmin.exe declare queue name = NameofQueue1 durable=true

  3. Utwórz Wiązanie:

    C:\python26\python.exe rabbitmqadmin.exe declare binding source=ExchangeName1 destination_type=queue destination=NameofQueue1 routing_key= RoutingKey1

Wykonując rabbitmqadmin.exe-help - subkomands wyświetla wszystkie dostępne polecenia

Eg: c:\python26\python.exe rabbitmqadmin.exe-help-subcommands

 3
Author: Milli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-24 14:33:02

rabbitmqctl, dostarczony interfejs wiersza poleceń nie ujawnia możliwości tworzenia kolejki i wiązania jej.

Jest to jednak dość trywialne, aby zrobić to za pomocą szybkiego skryptu, a Przewodnik RabbitMQ getting started guide pokazuje kilka przykładów tego, zarówno po stronie wydawcy, jak i konsumenta.

#do some work to connect
#do some work to open a channel
channel.queue_declare(queue='helloworld')
[[2]] zastanawiam się nad połączeniem, ale to jest dosłowne jedno liniowe, aby utworzyć kolejkę. Operacja jest również idempotentna, co oznacza, że można dołączyć instrukcję do skryptu i być bezpiecznym, wiedząc, że nie będzie odtwarzać kolejki lub zdmuchnąć istniejącego o tej samej nazwie.
 2
Author: bakasan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-28 06:43:46

Dla mnie, mój RabbitMQ Management deal ciągle próbował przekierować do wersji https... wszystko w mojej konfiguracji jest waniliowe, nie mam nawet pliku konfiguracyjnego... tak czy inaczej, Moja praca polegała na ręcznym utworzeniu rabbitmqadmin.py w folderze sbin, a następnie wypełnieniu go https://raw.githubusercontent.com/rabbitmq/rabbitmq-management/v3.8.1/bin/rabbitmqadmin

Następnie upewnij się, że python jest w twoim PATH i uruchom to, aby na przykład dodać exchange:

python rabbitmqadmin.py declare exchange --vhost=/ name=CompletedMessageExchange type=direct
 0
Author: Serj Sagan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-05 16:47:59

Oto bardziej minimalistyczny przykład Pythona, zaczerpnięty z RabbitMQ Python tutorial .

Najpierw zainstaluj pika:

sudo easy_install pika
# (or use pip)
To wszystko, czego potrzebujesz, aby wysłać wiadomość do 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!')
 0
Author: Steve Rukuts,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-28 06:46:04

Aby utworzyć i usunąć kolejkę w RabbitMQ:

Nie mogłem znaleźć polecenia linii poleceń, aby to zrobić. Oto jak zrobiłem to w kodzie z Javą.

Rabbitmq - wersja serwera {[4] } na Ubuntu.

Lista kolejek, jeszcze nie ma kolejek:

sudo rabbitmqctl list_queues
[sudo] password for eric:
Listing queues ...
...done.

Włóż to do 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();
  }
}

Podaj plik jar, który został dostarczony wraz z instalacją rabbitmq:

Używam rabbitmq-client.Jar w wersji 0.9.1, użyj tego, który przychodzi z twoją wersją rabbitmq.

Skompiluj i uruchom:

javac -cp .:rabbitmq-client.jar CreateQueue.java
java -cp .:rabbitmq-client.jar CreateQueue

Powinien zakończyć się bez błędów, Sprawdź swoje kolejki teraz:

sudo rabbitmqctl list_queues
Listing queues ...
kowalski        0
...done.

Kolejka Kowalskich istnieje.

 -1
Author: Eric Leschinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-08 20:04:50

Pomaga powiązać wymianę podczas jej trwania:

channel.queue_bind(queueName, exchange)

C -;

 -2
Author: Phlip,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-07 06:31:17