Minion - Job queue
use Minion; # Connect to backend my $minion = Minion->new(Mango => 'mongodb://localhost:27017'); # Add tasks $minion->add_task(something_slow => sub { my ($job, @args) = @_; sleep 5; say 'This is a background worker process.'; }); # Enqueue jobs $minion->enqueue(something_slow => ['foo', 'bar']); $minion->enqueue(something_slow => [1, 2, 3]); # Perform jobs automatically for testing $minion->auto_perform(1); $minion->enqueue(something_slow => ['foo', 'bar']); # Build more sophisticated workers my $worker = $minion->repair->worker->register; if (my $job = $worker->dequeue) { $job->perform } $worker->unregister;
Minion is a job queue for the Mojolicious real-time web framework.
Background worker processes are usually started with the command Minion::Command::minion::worker, which becomes automatically available when an application loads the plugin Mojolicious::Plugin::Minion.
$ ./myapp.pl minion worker
Jobs can be managed right from the command line with Minion::Command::minion::job.
$ ./myapp.pl minion job
Note that this whole distribution is EXPERIMENTAL and will change without warning!
Most of the API is not changing much anymore, but you should wait for a stable 1.0 release before using any of the modules in this distribution in a production environment.
Minion inherits all events from Mojo::EventEmitter and can emit the following new ones.
$minion->on(worker => sub { my ($minion, $worker) = @_; ... });
Emitted when a new worker is created.
$minion->on(worker => sub { my ($minion, $worker) = @_; my $id = $worker->id; say "Worker $$:$id started."; });
Minion implements the following attributes.
my $app = $minion->app; $minion = $minion->app(MyApp->new);
Application for job queue, defaults to a Mojo::HelloWorld object.
my $bool = $minion->auto_perform; $minion = $minion->auto_perform($bool);
Perform jobs automatically when a new one has been enqueued with "enqueue", very useful for testing.
my $backend = $minion->backend; $minion = $minion->backend(Minion::Backend::Mango->new);
Backend.
my $tasks = $minion->tasks; $minion = $minion->tasks({foo => sub {...}});
Registered tasks.
Minion inherits all methods from Mojo::EventEmitter and implements the following new ones.
$minion = $minion->add_task(foo => sub {...});
Register a new task.
my $id = $minion->enqueue('foo'); my $id = $minion->enqueue(foo => [@args]); my $id = $minion->enqueue(foo => [@args] => {priority => 1});
Enqueue a new job with inactive state. You can also append a callback to perform operation non-blocking.
inactive
$minion->enqueue(foo => sub { my ($minion, $err, $id) = @_; ... }); Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
These options are currently available:
delayed => (time + 1) * 1000
Delay job until after this point in time.
priority => 5
Job priority, defaults to 0.
0
my $job = $minion->job($id);
Get Minion::Job object without making any changes to the actual job or return undef if job does not exist.
undef
my $minion = Minion->new(Mango => 'mongodb://127.0.0.1:27017');
Construct a new Minion object.
$minion = $minion->repair;
Repair worker registry and job queue, all workers on this host should be owned by the same user.
$minion = $minion->reset;
Reset job queue.
my $stats = $minion->stats;
Get statistics for jobs and workers.
my $worker = $minion->worker;
Build Minion::Worker object.
Sebastian Riedel, sri@cpan.org.
sri@cpan.org
Copyright (C) 2014, Sebastian Riedel.
This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.
https://github.com/kraih/minion, Mojolicious::Guides, http://mojolicio.us.
To install Minion, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Minion
CPAN shell
perl -MCPAN -e shell install Minion
For more information on module installation, please visit the detailed CPAN module installation guide.