当前位置: 首页 > 知识库问答 >
问题:

如何在Clojure中设置Hystrix命令的超时?

戎兴言
2023-03-14

我正在学习Hystrix和Clojure,不知道如何(正确地)在Clojure中设置Hystrix命令的超时。

我更广泛地搜索了StackOverflow和web。我查看了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命令,如果能将其扩展到设置(比如)200毫秒超时,我将不胜感激:

(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以防这使回答更容易。

非常感谢,奥利弗

共有1个答案

叶谦
2023-03-14

最简单的方法是只使用System属性。您可以设置全局默认值:

(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,那个么您可以在项目中添加一个环init。clj:ring{:handler您的handler:init您的配置方法}启动时将调用您的配置方法。

 类似资料:
  • 我们通过直接扩展HystrixCommand类来使用Hystrix功能。但是对于某些业务异常,Hystrix的回退方法会被触发。 我不想为某些特定于业务的异常触发Hystrix回退。我如何能够实现它没有注解的基础?

  • 问题内容: 我试图在Windows 7 64位的Netbeans 7.1 Java项目中设置命令行参数。 Netbeans没有传递我给它的参数。 我转到-> -> ->并在“自变量”旁边键入自变量,但是自变量未传递到程序。我如何通过他们? 问题答案: 我猜您正在使用(或shift-F6)而不是运行文件。NetBeans 7.1帮助文件(F1是您的朋友!)说明Arguments参数: 添加参数以在应

  • 问题内容: 我org.springframework.ws.client.core.WebServiceTemplate用于拨打Web服务。如何为通话配置超时。 问题答案: 如果你使用的是Spring Webservices 2.1.0版本,则可以使用HttpComponentsMessageSender设置超时。 Spring不推荐使用CommonsHttpMessageSender,因此不再推

  • 我正在尝试在我的WebClient上设置超时,以下是当前代码: 我需要添加超时和池策略,我在想这样的事情: 但是我不知道如何在我的webclient中设置httpClient

  • 问题内容: 我正在尝试在使用http.request且没有运气的HTTP客户端上设置超时。到目前为止,我所做的是: 有什么提示吗? 问题答案: 现在可以使用option和相应的request事件:

  • 如果数据不是很大,这是可行的。(例如,最大5 MB) 但如果数据很大,则在10秒后出现超时错误。 是否存在修改该类中默认超时的方法?