Minion::Backend::mysql
version 1.003
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;
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. This backend requires at least v5.6.5 of MySQL.
minion
Minion::Backend::mysql - MySQL backend
Minion::Backend::mysql inherits all attributes from Minion::Backend and implements the following new ones.
my $mysql = $backend->mysql; $backend = $backend->mysql(Mojo::mysql->new);
Mojo::mysql object used to store all data.
If true, will not make a transaction around the "enqueue" insertions when a job has parent jobs. Without a transaction, the job could be dequeued before its parent relationships are written to the database. However, since MySQL does not support nested transactions (despite supporting something almost exactly like them...), you can disable transactions for testing by setting this attribute (if you perform your tests in a transaction so they can be rolled back when the test is complete).
Minion::Backend::mysql inherits all methods from Minion::Backend and implements the following new ones.
my $job_info = $backend->dequeue($worker_id, 0.5); my $job_info = $backend->dequeue($worker_id, 0.5, {queues => ['important']});
Wait for job, dequeue it and transition from inactive to active state or return undef if queues were empty.
inactive
active
undef
These options are currently available:
queues => ['important']
One or more queues to dequeue jobs from, defaults to default.
default
These fields are currently available:
args => ['foo', 'bar']
Job arguments.
id => '10023'
Job ID.
retries => 3
Number of times job has been retried.
task => 'foo'
Task name.
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.
delay => 10
Delay job for this many seconds (from now).
priority => 5
Job priority, defaults to 0.
0
queue => 'important'
Queue to put job in, defaults to default.
my $bool = $backend->fail_job($job_id, $retries); my $bool = $backend->fail_job($job_id, $retries, 'Something went wrong!'); my $bool = $backend->fail_job( $job_id, $retries, {msg => 'Something went wrong!'});
Transition from active to failed state.
failed
my $bool = $backend->finish_job($job_id, $retries); my $bool = $backend->finish_job($job_id, $retries, 'All went well!'); my $bool = $backend->finish_job($job_id, $retries, {msg => 'All went well!'});
Transition from active to finished state.
finished
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};
created => 784111777
Time job was created.
delayed => 784111777
Time job was delayed to.
finished => 784111777
Time job was finished.
priority => 3
Job priority.
Queue name.
result => 'All went well!'
Job result.
retried => 784111777
Time job has been retried.
started => 784111777
Time job was started.
state => 'inactive'
Current job state, usually active, failed, finished or inactive.
worker => '154'
Id of worker that is processing the job.
my $batch = $backend->list_jobs($offset, $limit); my $batch = $backend->list_jobs($offset, $limit, {states => 'inactive'});
Returns the same information as "job_info" but in batches.
List only jobs in this state.
task => 'test'
List only jobs for this task.
my $batch = $backend->list_workers($offset, $limit);
Returns the same information as "worker_info" but in batches.
my $backend = Minion::Backend::mysql->new('mysql://mysql@/test');
Construct a new Minion::Backend::mysql object.
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.
my $bool = $backend->remove_job($job_id);
Remove failed, finished or inactive job from queue.
$backend->repair;
Repair worker registry and job queue if necessary.
$backend->reset;
Reset job queue.
my $bool = $backend->retry_job($job_id, $retries); my $bool = $backend->retry_job($job_id, $retries, {delay => 10});
Transition from failed or finished state back to inactive.
parents => [$id1, $id2, $id3]
Jobs this job depends on.
Queue to put job in.
my $stats = $backend->stats;
Get statistics for jobs and workers.
$backend->unregister_worker($worker_id);
Unregister worker.
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};
host => 'localhost'
Worker host.
jobs => ['10023', '10024', '10025', '10029']
Ids of jobs the worker is currently processing.
notified => 784111777
Last time worker sent a heartbeat.
pid => 12345
Process id of worker.
Time worker was started.
This may happen when the SQL create/upgrade scripts fail to run completely due to permission errors. Re-running with the environment variable MOJO_MIGRATIONS_DEBUG=1 should produce the error message returned by the database.
MOJO_MIGRATIONS_DEBUG=1
A common reason for the database install to fail on MySQL >= 8 is that the user installing the database does not have SUPER privileges needed to create functions when binlogs are enabled: (DBD::mysql::st execute failed: You do not have the SUPER privilege and binary logging is enabled). See the MySQL documentation for Stored Program Binary Logging for more information about this problem and how to correct it.
SUPER
DBD::mysql::st execute failed: You do not have the SUPER privilege and binary logging is enabled
Minion, Mojolicious::Guides, http://mojolicio.us.
Brian Medley <bpmedley@cpan.org>
Doug Bell <preaction@cpan.org>
Alexander Nalobin <nalobin@reg.ru>
Dmitry Krylov <pentabion@gmail.com>
Hu Yin <huyin8@gmail.com>
Jason A. Crome <jcrome@empoweredbenefits.com>
Larry Leszczynski <larryl@cpan.org>
Larry Leszczynski <larryl@emailplus.org>
Olaf Alders <olaf@wundersolutions.com>
Paul Cochrane <paul@liekut.de>
Sergey Andreev <40195653+saintserge@users.noreply.github.com>
Zoffix Znet <cpan@zoffix.com>
This software is copyright (c) 2021 by Doug Bell and Brian Medley.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
To install Minion::Backend::mysql, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Minion::Backend::mysql
CPAN shell
perl -MCPAN -e shell install Minion::Backend::mysql
For more information on module installation, please visit the detailed CPAN module installation guide.