Menu

x-mq

Wurlde

Está pensado como "extensión shell" para sistemas unix/linux y poder interpretar a mi antojo el resultado vía grep, awk...

La forma de arrancarlo es:
$ java -jar mq.jar <puerto>

El <puerto> en los ejemplos que voy a utilizar es el 9090.

Como 'incidencia' notable es, que si recién arrancado se le hace una prueba de carga, perderá aproximadamente 2-3 mensajes de los 100 primeros, para evitar esto, es mejor lanzar un primer mensaje que provoque la creación de la entrada de la 'queue' y toda su estructura asociada...

ejemplo de inserción:

$ echo -ne 'set q-1 esto es el valor 1' | nc localhost 9090

-> q-1 es el nombre de la 'queue' (no debe tener espacios), el resto es el mensaje que se insertará, y devuelve el 'id' (currentTimeMillis()) al invocador.

podemos ver un listado de 'queues' creadas con:
$ echo -ne 'list' | nc localhost 9090

y especificar algo más, mostrando un listado de q-1 en el ejemplo...
$ echo -ne 'list q-1' | nc localhost 9090

este comando devuelve el ordinal dentro de la 'queue', el 'id' y el valor insertado, para recuperar un valor en concreto...
(utilizando el ordinal)
$ echo -ne 'get q-1 0' | nc localhost 9090

También tiene un 'espacio' de variables compartidas, asignar una variable es tan facil como...
$ echo -ne 'var.set pop=no hay stop' | nc localhost 9090

... y recuperar su valor...
$ echo -ne 'var.get pop' | nc localhost 9090

para detener el programa (se pierden los datos si no se salvan primero)
$ echo -ne 'halt' | nc localhost 9090

... y como he mencionado lo de 'salvar' los datos, puede que interese antes hacer esto...

$ echo -ne 'save' | nc localhost 9090

A continuación, un listado de comandos "soportados" con ejemplos:
// Get an item from a queue based on its index

get <queue-name> <index>
$ echo -ne 'get q-1 0' | nc localhost 9090

// Insert an item in a queue (allows duplicates)
set <queue-name> <value>
$ echo -ne 'set q-1 esto es el valor 1' | nc localhost 9090
$ echo -ne 'set q-1 esto es el valor 2' | nc localhost 9090
$ echo -ne 'set q-1 esto es el valor 3' | nc localhost 9090
$ echo -ne 'set q-1 esto es el valor 4' | nc localhost 9090
$ echo -ne 'set q-1 esto es el valor 5' | nc localhost 9090

// Delete an item from a queue based on its index
delete <queue-name> <index>
$ echo -ne 'delete q-1 1' | nc localhost 9090

// Queues list
list
$ echo 'list' | nc localhost 9090

// Items list
list <queue-name>
$ echo 'list q-1' | nc localhost 9090

// Query a queue using some simple filters
// echo 'query <queue name=""> <operation> <param 1=""> ... <param N="">' | nc <ip> <port>
// operations and related params:
// age< <age in="" ms="">
// age> <age in="" ms="">
// ts.inrange <ms> <ms>
// ts< <ms>
// ts> <ms>
// string.startswith <string>
// string.endswith <string>
// string.contains <string>
query <queue name=""> <operation> <param 1=""> ... <param N="">
$ echo -ne 'query q-1 age> 200000' | nc localhost 9090
$ echo -ne 'query q-1 age< 200000' | nc localhost 9090
$ echo -ne 'query q-1 ts< 1431932225151' | nc localhost 9090
$ echo -ne 'query q-1 ts> 1431932225151' | nc localhost 9090
$ echo -ne 'query q-1 string.startswith esto es' | nc localhost 9090
$ echo -ne 'query q-1 string.endswith valor 5' | nc localhost 9090
$ echo -ne 'query q-1 string.contains es el' | nc localhost 9090

// Dump all items
save
$ echo -ne 'save' | nc localhost 9090

-- salvar a un fichero, obvio, pero por si acaso --
$ echo -ne 'save' | nc localhost 9090 > archivo.save