[erlang-questions] design pattern question for messaging system

Miles Fidelman mfidelman@REDACTED
Tue Jul 22 13:53:05 CEST 2014

Hi Folks,

So far, I've mostly been experimenting w/ Erlang, and using Erlang-based 
technology (notably CouchDB).  As I'm thinking about a new application, 
I'm having trouble getting my hands around an appropriate design 
pattern.  I wonder if anybody might be able to point me in the right 

The application is message handling (back to that in a minute).  I 
realize that I have a pretty good idea how to handle some kinds of 
applications in a highly concurrent fashion, such as:
- modeling/simulation (obviously, each entity - such as a vehicle - is a 
process) - this is what led me to Erlang in the first place
- protocol engines as state machines - e.g., spawn a process for each 
tcp connection
- transaction systems - spawn a process for each transaction
- transaction oriented

But I'm looking at a work flow application that maps onto a 
paper-forms-based model.  It's a classic queuing system - work elements 
move from queue to queue as they're worked on.  The obvious first 
thought is:
- a process for each queue
- a worker process for each work step
- a message for each piece of work-in-process -- moving from queue to 
queue via the worker processes

Except, that model kind of falls down because Erlang message are 
unreliable by design, and don't persist in the event of a process crash 
(much less a node crash).

My first two thoughts are:
- spawn a process for each queue entry, pass around the PIDs
- use Mnesia to hold the queues

But neither of those feels quite right.  This must be a solved problem, 
but I'm hitting a blind spot.  So... what is the design pattern for 
queuing systems and/or reliable message passing in Erlang?

Any good examples to look at?  Good presentation slides or reference 
materials to review?

Thanks very much,

Miles Fidelman

In theory, there is no difference between theory and practice.
In practice, there is.   .... Yogi Berra

More information about the erlang-questions mailing list