web-dev-qa-db-fra.com

RabbitMQ créer des files d'attente et des liaisons à partir d'une ligne de commande

Si RabbitMQ est installé sur ma machine, existe-t-il un moyen de créer une file de messages à partir de la ligne de commande et de la lier à un certain échange sans utiliser de client?

Je pense que ce n'est pas possible, mais je veux être sûr.

50
Fanooos

Installez le plugin de gestion RabbitMQ . Il est livré avec un outil de ligne de commande que vous pouvez utiliser pour configurer toutes vos files d'attente/échanges/etc.

18
OJ.

Résumé:

Les autres réponses sont de bonnes alternatives à ce qui a été demandé. Vous trouverez ci-dessous des commandes que vous pouvez utiliser à partir de la ligne de commande.

Tout d’abord, effectuez tous les travaux préparatoires nécessaires, par exemple: installer lapin, rabbitmqadmin, et rabbitctl. L'idée est d'utiliser les commandes de rabbitmqctl et rabbitmqadmin. Vous pouvez voir quelques exemples de commandes: https://www.rabbitmq.com/management-cli.html

Exemple de commandes/Setup:

Les commandes suivantes devraient vous donner la majorité sinon la totalité de ce dont vous avez besoin:

# 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

Ajouter un utilisateur et des autorisations

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

Créer un hôte virtuel et définir les autorisations

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

Effectuer un échange

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

Faire une file d'attente

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

Faire une reliure

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

Autre façon de se lier avec Python

Ce qui suit est une alternative à la liaison de ligne de commande, car je rencontrais parfois des problèmes et trouvais le code python suivant plus fiable.

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

Ce qui précède peut être exécuté dans le cadre d’un script utilisant python. Remarquez que je mets les éléments sortants dans des tableaux, ce qui vous permettra de les parcourir. Cela devrait rendre les choses faciles pour les déploiements.

Dernières pensées

Je pense que ce qui précède devrait vous faire avancer dans la bonne direction. Utilisez Google si des commandes spécifiques n’ont pas de sens ou lisez plus avec rabbitmqadmin help subcommands. J'ai essayé d'utiliser des variables qui s'expliquent. Bonne chance :)

73
James Oravec

Si vous utilisez Linux Debian, il existe un paquet appelé "amqp-tools". Installez-le avec

apt-get install amqp-tools

Vous pouvez ensuite utiliser une ligne de commande telle que amqp-publish pour envoyer des messages à votre file d'attente.

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

Ensuite, vous pouvez collecter les messages de la file d'attente à l'aide de

amqp-get -q queue_name

ou

amqp-consume -q queue_name

Il existe également des exemples (en ligne de commande) de rabbitmq-c package/library. Une fois que vous l'avez créé, vous pouvez envoyer des messages via une ligne de commande, telle que

amqp_sendstring localhost 5672 amq.direct test "hello world"

S'amuser ...

3
rahard

créer un échange: rabbitmqadmin -u {user} -p {password} -V {vhost} declare exchange name={name} type={type}

crée une file d'attente: rabbitmqadmin -u {user} -p {password} -V {vhost} declare queue name={name}

Lier la file d'attente à Exchange: rabbitmqadmin -u {user} -p {password} -V {vhost} declare binding source={Exchange} destination={queue}

3
Kaushal Dontula

rabbitmqctl, l'interface de ligne de commande fournie n'expose pas la possibilité de créer une file d'attente et de la lier.

Cependant, il est assez simple de le faire avec un script rapide cependant, et le guide de démarrage de Rabbit mq en fournit plusieurs exemples, tant du côté de l'éditeur que du côté du consommateur.

#do some work to connect
#do some work to open a channel
channel.queue_declare(queue='helloworld')

Je me fie à la connexion, mais c'est une doublure littérale pour créer une file d'attente. L'opération est également idempotente, ce qui signifie que vous pouvez inclure l'instruction dans un script et être en sécurité en sachant qu'elle ne recréera pas la file d'attente ni n'en supprimera un existant du même nom.

2
bakasan

Create RabbitMq Exchange, File d'attente et liaisons dynamiques à partir de la CLI sous Windows 

J'avais déjà un serveur RabbitMQ installé et fonctionnant avec plusieurs files d'attente et échanges et je voulais maintenant le créer à la volée à partir de la ligne de commande. Je sais que c'est une vieille question, mais je pensais que donner cette information serait utile.

Voici ce que j'ai fait:

Installer

  1. Téléchargé et installé le programme d’installation MSI Windows x86-64 Python 2.6.6-201008-24, toute version de python supérieure à 2.X mais non à 3.X.
  2. Télécharger RabbitMqAdmin: L'interface utilisateur Web RabbitMq a une ligne de commande permettant de naviguer vers http: // nom-serveur: 15672/cli/ (nom-serveur: serveur sur lequel rabbitmq est installé) alternativement , utilisez l’URL ci-dessus et enregistrez le fichier sous le nom rabbitmqadmin.exe dans l’emplacement exe de Python.

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

Code: dans un fichier batch utilisé les commandes ci-dessous

  1. Créer un échange:

    c:\python26\python.exe rabbitmqadmin.exe déclarer le nom d'échange = ExchangeName1 type = topic durable = true

  2. Créer une file d'attente:

    c:\python26\python.exe rabbitmqadmin.exe déclarer le nom de la file d'attente = NameofQueue1 durable = true

  3. Créer une liaison:

    c:\python26\python.exe rabbitmqadmin.exe déclarer la source de liaison = ExchangeName1 type_destination = file d'attente destination = NameofQueue1 rout_key = RoutingKey1

en exécutant rabbitmqadmin.exe -help -subcommands, il répertorie toutes les commandes disponibles

par exemple: c:\python26\python.exe rabbitmqadmin.exe -help -subcommands

1
Milli

Peut-être un peu tard pour la fête, mais je l’ai fait avec CURL.

Pour les files d'attente:

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

Et pour les reliures

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

Note 192.168.99.100:15672 points à mon gestion RMQ

1
userMod2

Voici un exemple plus minimal de Python, tiré du tutoriel RabbitMQ Python .

Tout d'abord, installez pika:

Sudo easy_install pika
# (or use pip)

C’est tout ce dont vous avez besoin pour envoyer un message à 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
Steve Rukuts