@hackage postgresql-simple-queue0.1.0.0

A PostgreSQL backed queue

This module utilize PostgreSQL to implement a durable queue for efficently processing arbitrary payloads which can be represented as JSON.

Typically a producer would enqueue a new payload as part of larger database transaction

 createAccount userRecord = do
    'runDBTSerializable' $ do
       createUserDB userRecord
       'enqueueDB' $ makeVerificationEmail userRecord

In another thread or process, the consumer would drain the queue.

  forever $ do
    -- Attempt get a payload or block until one is available
    payload <- 'lock' conn

    -- Perform application specifc parsing of the payload value
    case fromJSON $ 'pValue' payload of
      Success x -> sendEmail x -- Perform application specific processing
      Error err -> logErr err

    -- Remove the payload from future processing
    'dequeue' conn $ 'pId' payload