我正在学习Hystrix和Clojure,不知道如何(正确地(在Clojure中设置Hystrix命令的超时。
我搜索了StackOverflow和更广泛的网络。我查看了Hystrix的Clojure包装器源代码(https://github.com/Netflix/Hystrix/blob/master/hystrix-contrib/hystrix-clj/src/main/clojure/com/netflix/hystrix/core.clj)。有一个init-fn函数参数看起来很有希望,但评论似乎表明这不是一个可持续的解决方案。但这会是一个简单的开始吗?
我在Clojure中运行了一个简单得离谱的Hystrix命令,如果能将其扩展到设置200ms超时,我将不胜感激:
(ns hystrix-timeout.core
(:require [clojure.string :as str])
(:require [com.netflix.hystrix.core :as hystrix])
(:gen-class))
(defn my-primary [a]
(if (= a true) (throw (Exception. "Primary failed")) (str "primary: " a)))
(defn my-fallback [a]
(str "fallback: " a))
(hystrix/defcommand my-command
{:hystrix/fallback-fn my-fallback}
[a]
(my-primary a))
(defn -main
"Executes a simple Hystrix command. Will use a timeout when I know how to do this in Clojure."
[& args]
(println (my-command false))
(println (my-command true))
(System/exit 0) ; Exit explicitly as Hystrix threads are still running.
)
我把我的莱因项目放在https://github.com/oliverbaier/learning/tree/master/hystrix-timeout以防这会让回答变得更容易。
非常感谢,Oliver
最简单的方法是只使用系统属性。您可以设置全局默认值:
(System/setProperty "hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds" "200")
或命令特定值:
(System/setProperty "hystrix.command.my-command.execution.isolation.thread.timeoutInMilliseconds" "200")
您可以在-main方法中执行此操作。如果你正在运行一个真正的web应用程序sans-main,你可以在project.clj:ring{:handler你的handler:init你的配置方法}中添加一个ring init,你的配置方式将在启动时被调用。