MediaCloud-JobManager
view release on metacpan or search on metacpan
lib/MediaCloud/JobManager/Broker/RabbitMQ.pm view on Meta::CPAN
package MediaCloud::JobManager::Broker::RabbitMQ;
#
# RabbitMQ job broker (using Celery protocol)
#
# Usage:
#
# MediaCloud::JobManager::Broker::RabbitMQ->new();
#
use strict;
use warnings;
use Modern::Perl "2012";
use Moose;
with 'MediaCloud::JobManager::Broker';
use Net::AMQP::RabbitMQ;
use UUID::Tiny ':std';
use Tie::Cache;
use JSON;
use Data::Dumper;
use Readonly;
use Log::Log4perl qw(:easy);
Log::Log4perl->easy_init(
{
level => $DEBUG,
utf8 => 1,
layout => "%d{ISO8601} [%P]: %m%n"
}
);
# flush sockets after every write
$| = 1;
use MediaCloud::JobManager;
use MediaCloud::JobManager::Job;
# RabbitMQ default timeout
Readonly my $RABBITMQ_DEFAULT_TIMEOUT => 60;
# Default amount of retries to try connecting to RabbitMQ to
Readonly my $RABBITMQ_DEFAULT_RETRIES => 60;
# RabbitMQ delivery modes
Readonly my $RABBITMQ_DELIVERY_MODE_NONPERSISTENT => 1;
Readonly my $RABBITMQ_DELIVERY_MODE_PERSISTENT => 2;
# RabbitMQ queue durability
Readonly my $RABBITMQ_QUEUE_TRANSIENT => 0;
Readonly my $RABBITMQ_QUEUE_DURABLE => 1;
# RabbitMQ priorities
Readonly my %RABBITMQ_PRIORITIES => (
$MediaCloud::JobManager::Job::MJM_JOB_PRIORITY_LOW => 0,
$MediaCloud::JobManager::Job::MJM_JOB_PRIORITY_NORMAL => 1,
$MediaCloud::JobManager::Job::MJM_JOB_PRIORITY_HIGH => 2,
);
# JSON (de)serializer
my $json = JSON->new->allow_nonref->canonical->utf8;
# RabbitMQ connection credentials
has '_hostname' => ( is => 'rw', isa => 'Str' );
has '_port' => ( is => 'rw', isa => 'Int' );
has '_username' => ( is => 'rw', isa => 'Str' );
has '_password' => ( is => 'rw', isa => 'Str' );
has '_vhost' => ( is => 'rw', isa => 'Str' );
has '_timeout' => ( is => 'rw', isa => 'Int' );
has '_retries' => ( is => 'rw', isa => 'Int' );
# RabbitMQ connection pool for every connection ID (PID + credentials)
( run in 2.392 seconds using v1.01-cache-2.11-cpan-5735350b133 )