BSD-3-Clause licensed by Jonathan Fischoff
Maintained by [email protected]
This version can be pinned in stack with:postgresql-simple-queue-1.0.1@sha256:41b78bab9deb25d1c640af1d29e4c3f9bab01164a436c7adf16ff7c546888f07,3377

Module documentation for 1.0.1

  • Database
    • Database.PostgreSQL
      • Database.PostgreSQL.Simple
        • Database.PostgreSQL.Simple.Queue
          • Database.PostgreSQL.Simple.Queue.Migrate

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