NAME

Minion::Backend::mysql - MySQL backend

SYNOPSIS

use Mojolicious::Lite;

plugin Minion => {mysql => 'mysql://user@127.0.0.1/minion_jobs'};

# Slow task
app->minion->add_task(poke_mojo => sub {
  my $job = shift;
  $job->app->ua->get('mojolicio.us');
  $job->app->log->debug('We have poked mojolicio.us for a visitor');
});

# Perform job in a background worker process
get '/' => sub {
  my $c = shift;
  $c->minion->enqueue('poke_mojo');
  $c->render(text => 'We will poke mojolicio.us for you soon.');
};

app->start;

DESCRIPTION

Minion::Backend::mysql is a backend for Minion based on Mojo::mysql. All necessary tables will be created automatically with a set of migrations named minion. Note that this backend uses many bleeding edge features, so only the latest, stable version of PostgreSQL is fully supported.

ATTRIBUTES

Minion::Backend::mysql inherits all attributes from Minion::Backend and implements the following new ones.

mysql

my $mysql   = $backend->mysql;
$backend = $backend->mysql(Mojo::mysql->new);

Mojo::mysql object used to store all data.

METHODS

Minion::Backend::mysql inherits all methods from Minion::Backend and implements the following new ones.

dequeue

my $job_info = $backend->dequeue($worker_id, 0.5);

Wait for job, dequeue it and transition from inactive to active state or return undef if queue was empty.

enqueue

my $job_id = $backend->enqueue('foo');
my $job_id = $backend->enqueue(foo => [@args]);
my $job_id = $backend->enqueue(foo => [@args] => {priority => 1});

Enqueue a new job with inactive state.

These options are currently available:

delay
delay => 10

Delay job for this many seconds (from now).

priority
priority => 5

Job priority, defaults to 0.

fail_job

my $bool = $backend->fail_job($job_id);
my $bool = $backend->fail_job($job_id, 'Something went wrong!');
my $bool = $backend->fail_job($job_id, {msg => 'Something went wrong!'});

Transition from active to failed state.

finish_job

my $bool = $backend->finish_job($job_id);
my $bool = $backend->finish_job($job_id, 'All went well!');
my $bool = $backend->finish_job($job_id, {msg => 'All went well!'});

Transition from active to finished state.

job_info

my $job_info = $backend->job_info($job_id);

Get information about a job or return undef if job does not exist.

# Check job state
my $state = $backend->job_info($job_id)->{state};

# Get job result
my $result = $backend->job_info($job_id)->{result};

These fields are currently available:

args

Job arguments.

created

Time job was created.

delayed

Time job was delayed to.

finished

Time job was finished.

priority

Job priority.

result

Job result.

retried

Time job has been retried.

retries

Number of times job has been retried.

started

Time job was started.

state

Current job state.

task

Task name.

worker

Id of worker that is processing the job.

list_jobs

my $batch = $backend->list_jobs($offset, $limit);
my $batch = $backend->list_jobs($offset, $limit, {state => 'inactive'});

Returns the same information as "job_info" but in batches.

These options are currently available:

state
state => 'inactive'

List only jobs in this state.

task
task => 'test'

List only jobs for this task.

list_workers

my $batch = $backend->list_workers($offset, $limit);

Returns the same information as "worker_info" but in batches.

new

my $backend = Minion::Backend::mysql->new('postgresql://postgres@/test');

Construct a new Minion::Backend::mysql object.

register_worker

my $worker_id = $backend->register_worker;
my $worker_id = $backend->register_worker($worker_id);

Register worker or send heartbeat to show that this worker is still alive.

remove_job

my $bool = $backend->remove_job($job_id);

Remove failed, finished or inactive job from queue.

repair

$backend->repair;

Repair worker registry and job queue if necessary.

reset

$backend->reset;

Reset job queue.

retry_job

my $bool = $backend->retry_job($job_id);
my $bool = $backend->retry_job($job_id, {delay => 10});

Transition from failed or finished state back to inactive.

These options are currently available:

delay
delay => 10

Delay job for this many seconds (from now).

stats

my $stats = $backend->stats;

Get statistics for jobs and workers.

unregister_worker

$backend->unregister_worker($worker_id);

Unregister worker.

worker_info

my $worker_info = $backend->worker_info($worker_id);

Get information about a worker or return undef if worker does not exist.

# Check worker host
my $host = $backend->worker_info($worker_id)->{host};

These fields are currently available:

host

Worker host.

jobs

Ids of jobs the worker is currently processing.

notified

Last time worker sent a heartbeat.

pid

Process id of worker.

started

Time worker was started.

SEE ALSO

Minion, Mojolicious::Guides, http://mojolicio.us.