hasql-queue: A PostgreSQL backed queue

[ bsd3, library, program, web ] [ Propose Tags ]

A PostgreSQL backed queue. Please see README.md


[Skip to Readme]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 1.0.1, 1.0.1.1, 1.2.0.0, 1.2.0.1, 1.2.0.2
Change log CHANGELOG.md
Dependencies aeson, async, base (>=4.7 && <5), base64-bytestring, bytestring, cryptohash-sha1, exceptions, hasql, hasql-queue, here, monad-control, postgresql-libpq, postgresql-libpq-notify (>=0.2.0.0), random, resource-pool, stm, text, time, tmp-postgres, transformers [details]
License BSD-3-Clause
Copyright 2020 Jonathan Fischoff
Author Jonathan Fischoff
Maintainer jonathangfischoff@gmail.com
Category Web
Home page https://github.com/jfischoff/hasql-queue#readme
Bug tracker https://github.com/jfischoff/hasql-queue/issues
Source repo head: git clone https://github.com/jfischoff/hasql-queue
Uploaded by JonathanFischoff at 2020-07-06T05:36:57Z
Distributions
Executables hasql-queue-tmp-db, benchmark
Downloads 1081 total (20 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2020-07-06 [all 1 reports]

Readme for hasql-queue-1.2.0.0

[back to package description]

Travis CI Status

hasql-queue

This module utilizes PostgreSQL to implement a durable queue for efficently processing payloads.

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

createAccount userRecord = transaction Serializable Write $ do
  createUser userRecord
  enqueueNotification "queue_channel" emailEncoder [makeVerificationEmail userRecord]

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

  -- Wait for a single new record and try to send the email 5 times for giving
  -- up and marking the payload as failed.
  forever $ withDequeue "queue_channel" conn emailDecoder 5 1 $
    mapM_ sendEmail

In the example above we used the Session API for enqueuing and the IO for dequeuing.

The Session API is useful for composing larger transactions and the IO utilizes PostgreSQL notifications to avoid polling.

Installation

stack install hasql-queue