Skip to content

Middlewares

akshat edited this page Nov 7, 2022 · 5 revisions

Goose has provision for middlewares which can run before/after execution of a Job.

How Middlewares work?

  • middleware-fn takes next as input
  • It returns a function of arity 2
  • Returned function takes opts & job as inputs
  • Function calls next with opts & job
  • Function can modify opts/job before proceeding, with utmost care
  • Function may choose to act on the result of next or not call it altogether based on certain criteria

Practical applications of Middlewares

  • Modify args of job pre-execution
  • Use returned value of job post-execution
  • Ignore exceptions thrown by job
  • Extending Goose's functionalities as described in this issue

Usage

(defn my-middleware
  [next]
  (fn [opts job]
    ; Be careful when modifying fields of opts/job.
    (let [result (next opts job)]
      (log/info result))))

(w/start (assoc w/default-opts :middlewares my-middleware))

Nuances

  • Middleware's time will be added to job execution time
  • For client-side middlewares, you can wrap enqueuing function around your middleware

Previous: Guide to Custom Metrics Backend        Next: API

Clone this wiki locally