diff options
| author | Franck Cuny <franck.cuny@gmail.com> | 2016-08-10 14:33:04 -0700 |
|---|---|---|
| committer | Franck Cuny <franck.cuny@gmail.com> | 2016-08-10 20:17:56 -0700 |
| commit | 8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d (patch) | |
| tree | a6cecddaaea7e87d901a6c28bebe3a531438f24b /posts/2010-04-14-presque-a-redis-tatsumaki-based-message-queue.org | |
| parent | Merge branch 'convert-to-org' (diff) | |
| download | lumberjaph-8d7d02f42c3947f756c18cb4d37d9d97fbd0d27d.tar.gz | |
convert back to md
Diffstat (limited to 'posts/2010-04-14-presque-a-redis-tatsumaki-based-message-queue.org')
| -rw-r--r-- | posts/2010-04-14-presque-a-redis-tatsumaki-based-message-queue.org | 104 |
1 files changed, 0 insertions, 104 deletions
diff --git a/posts/2010-04-14-presque-a-redis-tatsumaki-based-message-queue.org b/posts/2010-04-14-presque-a-redis-tatsumaki-based-message-queue.org deleted file mode 100644 index c7f718c..0000000 --- a/posts/2010-04-14-presque-a-redis-tatsumaki-based-message-queue.org +++ /dev/null @@ -1,104 +0,0 @@ -[[http://github.com/franckcuny/presque/tree/][presque]] is a small -message queue service build on top of -[[http://code.google.com/p/redis/][redis]] and -[[http://search.cpan.org/perldoc?Tatsumaki][Tatsumaki]]. It's heavily -inspired by [[http://github.com/gleicon/restmq][RestMQ]] and -[[http://github.com/defunkt/resque][resque]]. - -- Communications are done in JSON over HTTP -- Queues and messages are organized as REST resources -- A worker can be writen in any language that make a HTTP request and - read JSON -- Thanks to redis, the queues are persistent - -** Overview - -resque need a configuration file, writen in YAML that contains the host -and port for the Redis server. - -#+BEGIN_EXAMPLE - redis: - host: 127.0.0.1 - port: 6379 -#+END_EXAMPLE - -Let's start the server: - -#+BEGIN_EXAMPLE - % plackup app.psgi --port 5000 -#+END_EXAMPLE - -The applications provides some HTTP routes: - -- */*: a basic HTML page with some information about the queues -- */q/*: REST API to get and post job to a queue -- */j/*: REST API to get some information about a queue -- */control/*: REST API to control a queue (start or stop consumers) -- */stats/*: REST API to fetch some stats (displayed on the index page) - -Queues are created on the fly, when a job for an unknown queue is -inserted. When a new job is created, the JSON send in the POST will be -stored "as is". There is no restriction on the schema or the content of -the JSON. - -Creating a new job simply consist to : - -#+BEGIN_EXAMPLE - % curl -X POST "http://localhost:5000/q/foo" -d '{"foo":"bar", "foo2":"bar" }' -#+END_EXAMPLE - -and fetching the job: - -#+BEGIN_EXAMPLE - % curl "http://localhost:5000/q/foo" -#+END_EXAMPLE - -When a job is fetched, it's removed from the queue. - -** A basic worker - -I've also pushed -[[http://git.lumberjaph.net/p5-presque-worker.git/][presque::worker]]. -It's based on -[[http://search.cpan.org/perldoc?AnyEvent::HTTP][AnyEvent::HTTP]] and -[[http://search.cpan.org/perldoc?Moose][Moose]]. Let's write a basic -worker using this class: - -#+BEGIN_SRC perl - use strict; - use warnings; - use 5.012; # w00t - - package simple::worker; - use Moose; - extends 'presque::worker'; - - sub work { - my ($self, $job) = @_; - say "job's done"; - ...; # yadda yadda! - return; - } - - package main; - use AnyEvent; - - my $worker = - simple::worker->new(base_uri => 'http://localhost:5000', queue => 'foo'); - - AnyEvent->condvar->recv; -#+END_SRC - -A worker have to extends the presque::worker class, and implement the -method /work/. When the object is created, the class check if this -method is avalaible. You can also provide a =fail= method, which will be -called when an error occur. - -** The future - -I plan to add support for -[[http://en.wikipedia.org/wiki/WebSocket][websocket]], and probably -[[http://en.wikipedia.org/wiki/Xmpp][XMPP]]. More functionalities to the -worker too: logging, forking, handling many queues, ... I would like to -add priorities to queue also, and maybe scheluding job for a given date -(not sure if it's feasable with Redis). |
