NAME
Minion - Job queue
SYNOPSIS
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] => {priority => 5});
# 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;
DESCRIPTION
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.
EVENTS
Minion inherits all events from Mojo::EventEmitter and can emit the following new ones.
worker
$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.";
});
ATTRIBUTES
Minion implements the following attributes.
app
my $app = $minion->app;
$minion = $minion->app(MyApp->new);
Application for job queue, defaults to a Mojo::HelloWorld object.
auto_perform
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.
backend
my $backend = $minion->backend;
$minion = $minion->backend(Minion::Backend::Mango->new);
Backend.
tasks
my $tasks = $minion->tasks;
$minion = $minion->tasks({foo => sub {...}});
Registered tasks.
METHODS
Minion inherits all methods from Mojo::EventEmitter and implements the following new ones.
add_task
$minion = $minion->add_task(foo => sub {...});
Register a new task.
enqueue
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.
$minion->enqueue(foo => sub {
my ($minion, $err, $id) = @_;
...
});
Mojo::IOLoop->start unless Mojo::IOLoop->is_running;
These options are currently available:
- delayed
-
delayed => time + 1
Delay job until after this point in time in floating seconds since the epoch.
- priority
-
priority => 5
Job priority, defaults to
0
.
job
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.
new
my $minion = Minion->new(Mango => 'mongodb://127.0.0.1:27017');
Construct a new Minion object.
repair
$minion = $minion->repair;
Repair worker registry and job queue, all workers on this host should be owned by the same user.
reset
$minion = $minion->reset;
Reset job queue.
stats
my $stats = $minion->stats;
Get statistics for jobs and workers.
worker
my $worker = $minion->worker;
Build Minion::Worker object.
AUTHOR
Sebastian Riedel, sri@cpan.org
.
COPYRIGHT AND LICENSE
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.
SEE ALSO
https://github.com/kraih/minion, Mojolicious::Guides, http://mojolicio.us.