IPC::Lock::RabbitMQ - Simple and reliable scoped locking for coarse grained locks.


    my $locker1 = IPC::Lock::RabbitMQ->new( mq => $rabbitfoot );
    my $locker2 = IPC::Lock::RabbitMQ->new( mq => $rabbitfoot );

        my $lock  = $locker1->lock("foo");
        my $false = $locker2->lock("foo");
    # $lock out of scope here, i.e.
    # $lock = undef;

    my $new_lock = $locker2->lock("foo");


This module uses RabbitMQ to provide locking for coarse grained locks. The idea being that you want to take a lock to stop duplicate jobs doing the same work you are doing.

The lock taken whilst your job is running can last quite a while, and you don't want your lock to be broken by another process if you're still working. Equally well, if you crash, you want the lock to be freed so that another process can retry the job.



Constructs a lock manager object. Supply it with the mq parameter which contains either an instance of AnyEvent::RabbitMQ or Net::RabbitFoot

lock ($key)

Take a lock named with a specified key. Returns false if the lock is already held, returns a IPC::Lock::RabbitMQ::Lock object if the lock was successful.

The lock is unlocked either by latting the IPC::Lock::RabbitMQ::Lock object go out of scope, or by explicitly calling the unlock method on it.


Tomas Doran (t0m) <>.


Copyright 2011 the above author(s).

This sofware is free software, and is licensed under the same terms as perl itself.