morgon has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks,

in my current project we will have several cooperating Perl-processes running on several machines.

What we are currently thinking about is not having these processes talk directly to each other but decoupling them via a queuing middle-tier in which each processes would communicate indirectly via (persistent) queues.

We are running on Linux and use Oracle for the backend.

The question is now how to implement such a queuing infrastructure.

I can currently see four ways for us to achieve this:

1) Roll your own.

2) Use Spread.

3) Use database-tables are queues.

4) Use Oracle Advanced Queuing.

Currently I am trying to evalute options 2-4 and would welcome any feedback on specific pros and cons that more experienced monks see.

Personally I quite like Spread (so far - I don't have a lot of experience with it), however I am also seeing the advantages of Oracle Advanced Queuing as it would permit us to have a process dequeue a message, do it's business-logic, update some database-state and finally enqueue new messages all in one database-transaction.

So could you please provide some enlightenment?

Many thanks