temporal.io (Uber Cadence successor) in Clojure.
This is a library to help using the temporal java SDK by introducing helpers macros and functions.
The versionning is comprised of the temporal java version used followed by the number of commits in this projects.
For example version 1.5.0.7
of nha/temporal
means the temporal java version used is 1.5.0
and there are 7
commits in this repository.
Status: Alpha
If you must, here is the greetings sample translated:
(ns your.ns
(:require [nha.temporal :as t])
(:import [java.time Duration]))
(def task-queue "HelloActivityTaskQueue")
(def workflow-id "HelloActivityWorkflow")
(t/def-workflow-interface
GreetingWorkflow
(^String getGreeting [param-not-this] "say something yo"))
(t/def-activity-interface
GreetingActivities
(composeGreeting [^String greeting ^String n]))
(defrecord MyWorkflowImpl []
GreetingWorkflow
(getGreeting [this s]
(let [actv (t/activity-stub
GreetingActivities
(t/activity-opts {:start-to-close-timeout (Duration/ofSeconds 2)}))]
(.composeGreeting actv "HELLO " s))))
(defrecord MyActivityImpl []
GreetingActivities
(composeGreeting [this greetings n]
(str greetings n)))
(let [{:keys [client] :as component} (-> (t/component task-queue)
(t/start-component [MyWorkflowImpl] [(MyActivityImpl.)]))]
(let [^GreetingWorkflow workflow (t/network-stub client GreetingWorkflow (t/workflow-options task-queue workflow-id))]
;; this will print "HELLO WORLD"
(println (.getGreeting workflow "WORLD")))
(t/stop-component component))
Start a REPL with:
$ clojure -M:dev
Run the project's tests:
$ clojure -M:test
Deploy (on the main
branch):
$ export CLOJARS_USERNAME=username
$ export CLOJARS_PASSWORD=clojars-token
$ export CI=true # optional, if using temporal-testing
$ clj -T:build ci && clj -T:build install && clj -T:build deploy
Copyright © 2022 Nicolas.ha