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.
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.
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 :)
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 ...
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}
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.
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
exemple: C:\Python26\ C:\Python26\python C:\Python26\rabbitmqadmin.exe
Code: dans un fichier batch utilisé les commandes ci-dessous
Créer un échange:
c:\python26\python.exe rabbitmqadmin.exe déclarer le nom d'échange = ExchangeName1 type = topic durable = true
Créer une file d'attente:
c:\python26\python.exe rabbitmqadmin.exe déclarer le nom de la file d'attente = NameofQueue1 durable = true
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
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
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!')