Liking cljdoc? Tell your friends :D


Lighter Clojure replacement for Netflix hystrix latency and fault tolerance library


Basically: it runs tasks.

  • synchronous execution is provided by the exec function
  • asynchronous execution is provided by the queue function
  • each execution is mesured :
    • queue duration is the overhead time between submission and execution of the task.
    • call duration is the time took to purely execute the task
    • mesurements are attached to the result as metadata.
  • a hook (error-fn) lets specify a side-effect to execute in case of task failure
  • another one (fallback-fn) is used to provide a default value in case of task failure
  • an execution timeout can be specified : the task is guaranteed to take at most this amount of time, otherwise it will fail.


A commander is an object that implements the Commander protocol. The above features are provided whatever the implementation of the Commmander.

A commander implements the task scheduling and the metrics.

There are two commanders provided :

  • pumila.commander.simple is a no dependency commander that runs tasks out of a managed threadpool.
  • pumila.commander.reference is a commander based on dirigiste (a finely managed threadpool implementation), and metrics-clojure.

You can implement your own commander, for example based on a ready made ExecutorService and micro-meter.


(defn get-my-uri
  (:body (http/get uri)))

;; this is a very basic commander, not suitable for production
;; you may want to use the one provided in pumila.commander.reference
(def commander (pmc/new-commander))

(let [;; async
      f (pm/queue commander {:timeout 1000 :error-fn println :fallback-fn (constantly "I feel lucky!")}
                  (get-my-uri ""))
      result1 @f

      ;; sync
      result2 (pm/exec commander {:timeout 1000 :error-fn println :fallback-fn (constantly "I feel lucky!")} 
                       (get-my-uri ""))])


Copyright © 2016

Distributed under the Eclipse Public License either version 1.0 or (at your option) any later version.

Can you improve this documentation? These fine people already did:
Nils Grunwald & Jérôme Prudent
Edit on GitHub

cljdoc is a website building & hosting documentation for Clojure/Script libraries

× close