/goose

A Reliable, Pluggable & Scalable background job processing library for Clojure

Primary LanguageClojureMIT LicenseMIT

Goose

Test & Lint Workflow Clojars Project cljdoc badge

A Reliable, Pluggable & Scalable background job processing library for Clojure.

Performance

Please refer to the Benchmarking section.

Features

Getting Started

Clojars Project

Adding Goose as a dependency

;;; Clojure CLI/deps.edn
com.nilenso/goose {:mvn/version "0.3.1"}

;;; Leiningen/Boot
[com.nilenso/goose "0.3.1"]

Client

(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))

Worker

(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.

Getting Help

Get help on Slack

Please open an issue or ping us on #goose @Clojurians slack.

Contributing

Why the name "Goose"?

Named after LT Nick 'Goose' Bradshaw, the sidekick to Captain Pete 'Maverick' Mitchell in Top Gun.

License

Licence