{"id":21441405,"url":"https://github.com/clj-lx/clj-pgqueue","last_synced_at":"2025-03-17T00:40:30.092Z","repository":{"id":43852011,"uuid":"221229055","full_name":"clj-lx/clj-pgqueue","owner":"clj-lx","description":"Clojure + Postgres library for job queueing","archived":false,"fork":false,"pushed_at":"2024-03-08T20:57:26.000Z","size":92,"stargazers_count":1,"open_issues_count":2,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-23T10:27:03.197Z","etag":null,"topics":["clojure","queues"],"latest_commit_sha":null,"homepage":"","language":"Clojure","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"epl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/clj-lx.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-11-12T13:50:10.000Z","updated_at":"2020-05-27T12:19:40.000Z","dependencies_parsed_at":"2024-11-23T01:25:32.088Z","dependency_job_id":"bbbce4cb-28b6-4eeb-8461-23bd93ab1887","html_url":"https://github.com/clj-lx/clj-pgqueue","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clj-lx%2Fclj-pgqueue","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clj-lx%2Fclj-pgqueue/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clj-lx%2Fclj-pgqueue/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/clj-lx%2Fclj-pgqueue/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/clj-lx","download_url":"https://codeload.github.com/clj-lx/clj-pgqueue/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243955715,"owners_count":20374372,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clojure","queues"],"created_at":"2024-11-23T01:25:03.594Z","updated_at":"2025-03-17T00:40:30.070Z","avatar_url":"https://github.com/clj-lx.png","language":"Clojure","readme":"![](https://github.com/clj-pgqueue/clj-pgqueue/workflows/Clojure%20CI/badge.svg)\n\n# clj-pgqueue/clj-pgqueue\n\nA Clojure library designed to use Postgres as a queue storage.\nInspired by https://layerci.com/blog/postgres-is-the-answer/\n\n## Install\n\n[![Clojars Project](https://img.shields.io/clojars/v/clj-pgqueue.svg)](https://clojars.org/clj-pgqueue)\n\n\n## Usage\n\n#### bootstrap\n\n\t(require '[clj-pgqueue.bootstrap :as b])\n\t(b/bootstrap \"jobs\" \"jdbc:postgresql://localhost:5432/dbname\")\n\n#### single queue usage\n\n\t(require '[clj-pgqueue.queue :as q])\n\n    (defn worker [job] \n      (println \"processing \" job))\n      \n\t(def queue (-\u003e (q/new-\u003equeue datasource worker) (q/start)))\n\n\t(q/push queue (.getBytes \"payload\"))\n\t(q/push queue (.getBytes \"another payload\"))\n\n#### multiple queue usage\n\nYou can specify **queue name**\n\n```\n(require '[clj-pgqueue.queue :as q])\n\n(defn email-worker [job] \n  (println \"sending email worker\"))\n  \n(defn invoice-worker [job]\n  (pritnln \"invoice worker\"))  \n\n(def mail-queue (-\u003e (q/new-\u003equeue datasource email-worker {:queue-name \"mail-queue\"}) \n                    (q/start)))\n\n(def invoicing-queue (-\u003e (q/new-\u003equeue datasource invoice-worker {:queue-name \"invoicing-queue\"}) \n                         (q/start)))\n\n(q/push invoicing-queue (.getBytes \"invoice n#1\"))\n(q/push mail-queue (.getBytes \"confirmation email\"))\n\n```\n\n\n## TODO\n\n- [x] use protocol based implementation (in branch `protocol-based-queue`)\n- [ ] detect https://github.com/impossibl/pgjdbc-ng for a more efficient listening mechanism\n- [ ] api to handle notifications in parallel (q/subscribe queue fn {:parallel 3})\n- [ ] retry/backoff strategy\n\n## License\n\nCopyright © 2019 FIXME\n\nDistributed under the Eclipse Public License either version 1.0 or (at\nyour option) any later version.\n\n\n## Testing\n\n\tclojure  -R:test -A:test-runner -m kaocha.runner\n    ;; or\n    ./bin/kaocha\n\n\n\n## Cider\n\n\tclj -A:cider-clj:dev:test\n\n## nRepl\n\n   \tclj-A:nrepl:dev\n\n\n\n## Run tests from repl\n\n    (user/run-all-tests)\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclj-lx%2Fclj-pgqueue","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclj-lx%2Fclj-pgqueue","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclj-lx%2Fclj-pgqueue/lists"}