Swarmage - A Distributed Job Queue
swarmage task insert --config=config.yml swarmage worker --module=MyApp::Worker
XXX Warning: Alpha grade software. All API still subject to change. RFCs are welcome and will be considered ASAP XXX
Swarmage is a simple distributed job queue system.
Swarmage is comprised of Clients, Workers, and a Message Bus. Clients enqueue tasks to be performed in the message queue:
use strict; use Swarmage::Client; my $client = Swarmage::Client->new( hostname => "message.bus.hostname", login => "foo", passcode => "bar" ); $client->insert_task( Swarmage::Task->new( task_class => 'do_something_interesting', args => $any_set_of_variables ) );
That's it for the client. Now you just need a worker to execute your task. On some other host (or, it could as well be the same host):
use strict; use Swarmage::Worker; my $worker = Swarmage::Worker->new( hostname => "message.bus.hostname", login => "foo", passcode => "bar", ability => { do_something_interesting => sub { "actual code" } } ); $worker->work;
You execute this code, and the worker will keep on waiting for 'do_something_interesting' tasks, and will execute them when it gets a chance.
The above code can also be written in a more object oriented manner. Just override the work_once subroutine
package MyApp::Worker; use strict; use base qw(Swarmage::Worker); __PACKAGE__->register_abilities('do_something_interesting'); sub work_once { "actual code" } # in your worker script use strict; use MyApp::Worker; my $worker = MyApp::Worker->new( hostname => "message.bus.hostname", login => "foo", passcode => "bar", ); $worker->work;
Actually, once you write MyApp::Worker, you can just use the swarmage script that comes with this distribution:
swarmage worker --module=MyApp::Worker \ --hostname=message.bus.hostname \ --login=foo \ --passcode=bar
...And if you don't have to do any special pre-processing, you can just specify a task within a config file
swarmage task insert --config=foo.yml
Tasks are simply a combination of 'task_class', and a set of arbitrary data. It's completely up to the client and the worker to make any sense out of it.
Swarmage relies on message queues such as ActiveMQ as the underlying message layer.
There's an unfinished attempt at making a small scale DBIC-based message layer, but so far I have no plans to work on it. Patches are more than welcome
Copyright (c) 2007 Daisuke Maki <daisuke@endeworks.jp>
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://www.perl.com/perl/misc/Artistic.html
To install Swarmage, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Swarmage
CPAN shell
perl -MCPAN -e shell install Swarmage
For more information on module installation, please visit the detailed CPAN module installation guide.