-
Notifications
You must be signed in to change notification settings - Fork 6
/
timelimiter.clj
31 lines (22 loc) · 994 Bytes
/
timelimiter.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
(ns resilience.timelimiter
(:refer-clojure :exclude [name])
(:import (java.time Duration)
(io.github.resilience4j.timelimiter TimeLimiterConfig TimeLimiterConfig$Builder TimeLimiter)))
(defn ^TimeLimiterConfig time-limiter-config [opts]
(if (empty? opts)
(throw (IllegalArgumentException. "please provide not empty configuration for time limiter."))
(let [^TimeLimiterConfig$Builder config (TimeLimiterConfig/custom)]
(when-let [timeout (:timeout-millis opts)]
(.timeoutDuration config (Duration/ofMillis timeout)))
(when (:cancel-running-future opts)
(.cancelRunningFuture config true))
(.build config))))
(defn time-limiter [config]
(let [config (time-limiter-config config)]
(TimeLimiter/of ^TimeLimiterConfig config)))
;; name configs
;; name registry
;; name registry configs
(defmacro deftimelimiter [name config]
(let [sym (with-meta (symbol name) {:tag `TimeLimiter})]
`(def ~sym (time-limiter ~config))))