Description
A PostgreSQL backed queue.
Description
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' "queue_schema" $ 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 "queue" 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 "queue" conn $ pId payload
To support multiple queues in the same database, the API expects a table name string
to determine which queue tables to use.
README.md
postgresql-simple-queue
This module utilizes 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
Installation
stack install postgresql-simple-queue
Blog
This package was discussed in the blog Testing PostgreSQL for Fun.