antirez / disque

Disque is a distributed message broker
BSD 3-Clause "New" or "Revised" License
8k stars 538 forks source link

UNIX-ey command line interface for Disque #147

Open vi opened 8 years ago

vi commented 8 years ago

Current command line client looks a bit like whateversql CLI tool: suitable for management and debugging, but not very suitable to implement Discue-facing services in Bash or in general using command line world.

Is there already a client that starts a script for each job and acknowledges it when script exits successfully?

Job data can be fed to stdin, queue name and job id can be command line parameters.

I expect something like this:

$ cat > myscript <<\EOF
#!/bin/sh
# $1 and $2 are parameters specified in the disque-spawner
echo "Serving a job $3 from queue $4" >&2
sleep 5 # pretend to be working hard[ly]
wc
EOF
$ chmod +x myscript
$ disque-spawner -h <hostname> queue1 queue2 ... queueN --execute ./myscript script_parameter1 script_parameter2 &
$ disque-post -h <hostname> --wait queue2 < myfile.txt
D-e09bb425-Ht6sbFnDQ5jbmxELCwJAgHKU-05a1
$

disque-spawner should start specified command for each incoming job. It should periodically do WORKING if the comand is working, ACKJOB if command is finished with exit status 0 and NACK if finished with exit status not 0.

If not, where should such be implemented:

vi commented 8 years ago

Prototype as bash scripts: https://gist.github.com/vi/72a15ad557f1ce80f7ad

kaspar030 commented 7 years ago

@vi I'm developing something similar as job queue for a ci.

Check out dwq (disque work queue): https://github.com/kaspar030/dwq

Currently it expects to execute jobs on a git checkout, but that would be easy to hack out. And it's under heavy development...