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ść.
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.
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:)
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}
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 ...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
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
- 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
- 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ń
-
Create exchange:
C:\python26\python.exe rabbitmqadmin.exe declare exchange name= ExchangeName1 type = topic = true
-
Utwórz kolejkę:
C:\python26\python.exe rabbitmqadmin.exe declare queue name = NameofQueue1 durable=true
-
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
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.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
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!')
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.
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 -;
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