The Next-Level background job processing library for Clojure.
Simple. Pluggable. Reliable. Extensible. Scalable.
Please refer to the Benchmarking section.
- Reliable - Code/Hardware/Network failure won't cause data loss
- Native support for RabbitMQ & Redis
- Pluggable Message Broker & Metrics Backend
- Scheduled Jobs
- Batch Jobs
- Periodic Jobs
- Error Handling & Retries
- Extensible using Middlewares
- Concurrency & Parallelism friendly
- ... more details in Goose Wiki
;;; Clojure CLI/deps.edn
com.nilenso/goose {:mvn/version "0.4.0"}
;;; Leiningen/Boot
[com.nilenso/goose "0.4.0"]
(ns my-app
(:require
[goose.brokers.rmq.broker :as rmq]
[goose.client :as c]))
(defn my-fn
[arg1 arg2]
(println "my-fn called with" arg1 arg2))
(let [rmq-producer (rmq/new-producer rmq/default-opts)
;; Along with RabbitMQ, Goose supports Redis as well.
client-opts (assoc c/default-opts :broker rmq-producer)]
;; Supply a fully-qualified function symbol for enqueuing.
;; Args to perform-async are variadic.
(c/perform-async client-opts `my-fn "foo" :bar)
(c/perform-in-sec client-opts 900 `my-fn "foo" :bar)
;; When shutting down client...
(rmq/close rmq-producer))
(ns my-worker
(:require
[goose.brokers.rmq.broker :as rmq]
[goose.worker :as w]))
;;; 'my-app' namespace should be resolvable by worker.
(let [rmq-consumer (rmq/new-consumer rmq/default-opts)
;; Along with RabbitMQ, Goose supports Redis as well.
worker-opts (assoc w/default-opts :broker rmq-consumer)
worker (w/start worker-opts)]
;; When shutting down worker...
(w/stop worker) ; Performs graceful shutsdown.
(rmq/close rmq-consumer))
Refer to wiki for Redis, Periodic Jobs, Error Handling, Monitoring, Production Readiness, etc.
Please open an issue or ping us on #goose @Clojurians slack.
- As a first step, go through all the architecture-decisions
- Discuss with maintainers on the issues page or at #goose @Clojurians slack
- See the contributing guide for setup & guidelines
Named after LT Nick 'Goose' Bradshaw, the sidekick to Captain Pete 'Maverick' Mitchell in Top Gun.