nodejs - rabbitmq tutorial
RabbitMQ creando colas y enlaces desde una lĂnea de comando (9)
Si tengo RabbitMQ instalado en mi máquina, ¿hay una manera de crear una cola de mensajes desde la línea de comandos y enlazarla a un determinado intercambio sin usar un cliente?
Creo que no es posible, pero quiero estar seguro.
Tutorial para crear y eliminar una cola en RabbitMQ:
No pude encontrar un comando de línea de comandos para hacerlo. Así es como lo hice en código con java.
Rabbitmq-server versión 3.3.5
en Ubuntu.
Listar las colas, aún no hay colas:
sudo rabbitmqctl list_queues
[sudo] password for eric:
Listing queues ...
...done.
Pon esto en 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();
}
}
Suministre el archivo jar que vino con su instalación de rabbitmq:
Estoy usando la versión 0.9.1 de rabbitmq-client.jar, use la que viene con su versión de rabbitmq.
Compilar y ejecutar:
javac -cp .:rabbitmq-client.jar CreateQueue.java
java -cp .:rabbitmq-client.jar CreateQueue
Debería terminar sin errores, revisa tus colas ahora:
sudo rabbitmqctl list_queues
Listing queues ...
kowalski 0
...done.
la cola kowalski existe.
Instalar el complemento de gestión RabbitMQ . Viene con una herramienta de línea de comandos que puede utilizar para configurar todas sus colas / intercambios / etc.
Si está utilizando Linux Debian, hay un paquete llamado "amqp-tools". Instalarlo con
apt-get install amqp-tools
Luego puede usar la línea de comandos como amqp-publish para enviar mensajes a su cola
amqp-publish -e exchange_name -b "your message"
A continuación, puede recopilar mensajes de la cola mediante
amqp-get -q queue_name
o
amqp-consume -q queue_name
También hay (línea de comando) ejemplos de la biblioteca / paquete rabbitmq-c . Después de crearlo, puede enviar mensajes a través de la línea de comandos, como
amqp_sendstring localhost 5672 amq.direct test "hello world"
Que te diviertas ...
Tal vez un poco tarde para la fiesta, pero lo he hecho usando CURL.
Para colas:
curl -i -u RABBITUSER:RABBITPASSWORD -H "content-type:application/json" /
-XPUT -d''{"durable":true}'' /
http://192.168.99.100:15672/api/queues/%2f/QUEUENAME
Y para encuadernaciones.
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
Nota 192.168.99.100:15672 apunta a mi gestión de RMQ
ayuda a vincular el intercambio mientras estás en ello:
channel.queue_bind(queueName, exchange)
DO-;
rabbitmqctl, la interfaz de línea de comandos provista no expone la capacidad de crear una cola y enlazarla.
Sin embargo, es bastante trivial hacerlo con una secuencia de comandos rápida, sin embargo, la guía de iniciación de rabbit mq muestra varios ejemplos, tanto del editor como del consumidor.
#do some work to connect
#do some work to open a channel
channel.queue_declare(queue=''helloworld'')
Estoy ignorando la conexión, pero es un literal para crear una cola. La operación también es idempotente, lo que significa que puede incluir la declaración en un script y estar seguro de que no seguirá recreando la cola o eliminando una existente del mismo nombre.
Cree RabbitMq Exchange, cola y enlaces dinámicamente desde CLI en Windows
Ya tenía un servidor RabbitMQ instalado y funcionando con múltiples colas e intercambios y ahora quería crearlo sobre la marcha desde la línea de comandos. Sé que es una pregunta antigua, pero pensé que dar esta información sería útil.
Lo siguiente es lo que hice:
Preparar
- Descargué e instalé el instalador MSI de Python 2.6.6-201008-24 para Windows x86-64, cualquier versión de Python superior a 2.X pero no a 3.X
- Descargar RabbitMqAdmin: La Interfaz de usuario web de RabbitMq tiene una línea de comandos de enlace que navega a http://server-name:15672/cli/ (nombre-servidor: servidor en el que está instalado rabbitmq) alternativamente , use la URL anterior y guarde el archivo como rabbitmqadmin.exe en la ubicación de python exe
por ejemplo: C: / Python26 / C: / Python26 / python C: / Python26 / rabbitmqadmin.exe
Código: en un archivo por lotes se utilizan los siguientes comandos
Crear intercambio:
c: / python26 / python.exe rabbitmqadmin.exe declara el nombre de intercambio = ExchangeName1 type = topic durable = true
Crear cola:
c: / python26 / python.exe rabbitmqadmin.exe declare queue name = NameofQueue1 durable = true
Crear enlace:
c: / python26 / python.exe rabbitmqadmin.exe declare binding source = ExchangeName1 destination_type = queue destination = NameofQueue1 routing_key = RoutingKey1
ejecutando rabbitmqadmin.exe -help -subcommands enumera todos los comandos disponibles
por ejemplo: c: / python26 / python.exe rabbitmqadmin.exe -help -subcommands
Resumen:
Otras respuestas son buenas alternativas a lo que se pidió. A continuación se muestran los comandos que puede utilizar desde la línea de comandos.
Primero, haga todo el trabajo de preparación necesario, por ejemplo, instale rabbit, rabbitmqadmin
y rabbitctl
. La idea es usar comandos de rabbitmqctl
y rabbitmqadmin
. Puede ver algunos ejemplos de comandos: https://www.rabbitmq.com/management-cli.html
Ejemplo de comandos / configuración:
Los siguientes comandos deben darle la mayoría, si no todo lo que necesita:
# 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
Añadir un usuario y permisos.
rabbitmqctl add_user testuser testpassword
rabbitmqctl set_user_tags testuser administrator
rabbitmqctl set_permissions -p / testuser ".*" ".*" ".*"
Hacer un host virtual y establecer permisos
rabbitmqctl add_vhost Some_Virtual_Host
rabbitmqctl set_permissions -p Some_Virtual_Host guest ".*" ".*" ".*"
Hacer un intercambio
./rabbitmqadmin declare exchange --vhost=Some_Virtual_Host name=some_exchange type=direct
Hacer una cola
./rabbitmqadmin declare queue --vhost=Some_Virtual_Host name=some_outgoing_queue durable=true
Hacer un enlace
./rabbitmqadmin --vhost="Some_Virtual_Host" declare binding source="some_exchange" destination_type="queue" destination="some_incoming_queue" routing_key="some_routing_key"
Vía alternativa para enlazar con Python
La siguiente es una alternativa al enlace de línea de comando, ya que a veces he tenido problemas con ella y el siguiente código de Python es más confiable.
#!/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])
Lo anterior se puede ejecutar como parte de un script utilizando python. Note que puse las cosas salientes en arreglos, lo que le permitirá recorrerlas. Esto debería facilitar las cosas para los despliegues.
Últimos pensamientos
Creo que lo anterior debería hacer que te muevas en la dirección correcta, usar google si algún comando específico no tiene sentido o leer más con rabbitmqadmin help subcommands
. Intenté utilizar variables que se explicaran. Buena suerte :)
crear un intercambio: rabbitmqadmin -u {user} -p {password} -V {vhost} declare exchange name={name} type={type}
crear una cola: rabbitmqadmin -u {user} -p {password} -V {vhost} declare queue name={name}
Enlazar la cola de intercambio: rabbitmqadmin -u {user} -p {password} -V {vhost} declare binding source={Exchange} destination={queue}