问题标签 [hystrix]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Hystrix 命令因“超时且没有可用的回退”而失败
我注意到我的应用程序中的一些命令失败了
这是我的 Hystrix 配置覆盖:
这是什么类型的超时?是否是外部应用程序的读取/连接超时?我该如何调试呢?
spring - 无法通过 spring.cloud.config.enabled:false 禁用 Spring Cloud Config
让我先说我没有直接使用 Spring Cloud Config,它是通过 Spring Cloud Hystrix starter 传递的。
仅使用时@EnableHystrix
,Spring Cloud 还会尝试定位配置服务器,但预期不成功,因为我没有使用。据我所知,该应用程序运行良好,但问题在于状态检查。健康显示DOWN
是因为没有配置服务器。
浏览项目的源代码,我希望spring.cloud.config.enabled=false
禁用此功能链,但这不是我所看到的。
升级到1.0.0.RC1
(添加此属性)并使用后@EnableCircuitBreaker
:
检查 configprops 端点后,似乎我的属性被覆盖了。请注意,父级启用了 configClient。
如果我似乎没有正确执行此操作,任何方向都将不胜感激。
java - Hystrix 忽略运行超时
我正在对 Hystrix 进行一些试验。
我理解文档,即使通过“运行”对 Hystrix 命令的同步调用默认在线程中运行,并且应该受到 Hystrix 中配置的超时限制。但是当我尝试它时,似乎没有发生超时。
我是否误解了文档?还是我做错了什么?有没有办法通过同步调用获得超时行为?
更具体地说:我有一个需要 5 秒才能返回的“SimpleService”。这包含在 Hystrix 命令中,超时时间为 500 毫秒:
如果我这样称呼它:
我在 5 秒后得到结果 => 没有超时
如果我这样称呼它:
Hystrix 超时发生在 500 毫秒后并返回回退。
java - Hystrix 命令的预期粒度?
我刚刚阅读了Hystrix 文档/wiki,但仍然在基本层面上遗漏了一些东西:impl的预期粒度级别是什么?HystrixCommand
例如,假设我有一个 DAO 对象来处理某些 DB 实体的 CRUD 操作,例如Widget
:
现在,如果此 DAO 连接的数据库出现故障,所有 DAO 方法都将开始失败。但我认为数据库也有可能被捆绑在某种事务或维护模式下,比如允许读取,但不允许写入。在那种边缘情况下,读取会成功(getX(...)
方法),但所有其他的都会因SqlException
s 而失败。
所以我问:我应该在这里使用的预期粒度级别是多少?任何一个:
- 每个DAO 方法都有一个
HystrixCommand
impl ,看到在某些情况下命令可以成功运行,而在其他情况下,它们可能会失败;或者 - 一个
HystrixCommand
以某种方式融入 DAO 类,跨越所有DAO 方法(如果一个命令失败,则 DAO 作为一个整体“下降”。)?
我认为前者代表了更灵活的工程设计,但作为图书馆的消费者,我向我介绍了更多代码。想法?想法?
java - 如何让spring-cloud zuul为不同的服务使用不同的电路
我正在尝试使用 spring-cloud-starter-zuul。我已经设置了 Eureka 并注册了一个我作为 Eureka 客户端编写的简单服务。我在两个不同的主机上使用两个不同的应用程序名称注册了两个实例,因此它们是 Eureka 中的两个不同的服务。我的目标是确保如果 serviceA 表现良好而 serviceB 表现不佳,则代理到 serviceA 不会受到代理到 serviceB 失败的影响。
如果我通过 zuul 单独运行负载测试 serviceA,我可以毫无问题地保持 400 TPS 吞吐量。如果我然后投入 serviceB 并完全超载它并让它在所有地方超时,我希望 serviceA 在 serviceB 挣扎时继续以 400,但 serviceA 的成功率下降到低于 50 TPS 并且有一堆错误出色地。
似乎由 RibbonRoutingFilter 生成的所有 RibbonCommands 在 hystrix 中共享相同的电路,这对我来说毫无意义。查看创建 RibbonCommand 的 RibbonRoutingFilter,我看不到任何方法可以将其配置为使用不同的方法。
在 RibbonRoutingFilter 中:
我已经验证了 serviceA 和 serviceB 的 restClient 是不同的,所以他们使用自己的连接池配置,正如我在 application.yml 文件中指定的那样,但是 serviceA 和 serviceA 之间的服务质量仍然存在大量交叉污染服务 B.
RibbonCommand 似乎有另一个构造函数,它将“commandKey”作为第一个参数,而我引用的那个只是将 commandKey 值“default”委托给那个构造函数。我在 RibbonRoutingFilter 中看不到任何开关或选项来覆盖它。对我来说,这严重损害了在 spring-cloud 项目中使用 Zuul 的可行性。
有没有办法让我开箱即用地配置它,以便每个服务都有自己的电路?
我的 pom 的适用部分:
应用程序.yml:
我的应用程序类:
spring-data - 将 Hystrix 与 Spring 数据存储库一起使用
鉴于 Spring Data 和相关 REST 存储库的主要优点之一是开发人员在大多数情况下不必担心底层实现,是否有一种开箱即用的方式来利用 Spring Cloud Netflix 库,特别是在这种情况下的 Hystrix 注释,没有扩展提供的 Repository 接口中的每个调用或创建我自己的实现?
java - Hystrix 的 IllegalStateException
我是 Hystrix 的新手。我正在尝试将它与 Spring AOP 一起使用。以下详细说明了我想要实现的目标。
有一个“ServiceClass”,其中注入了一些 RestClient 类。我正在使用弹簧。现在,我想将 Hystrix 与 Spring AOP 一起使用,以便从 ServiceClass 对 RestClient 的方法调用可以同步或异步进行。
到目前为止,我所做的如下。
创建了一个扩展 HystrixCommand 实现 MethodInterceptor 的类“MyCommand”
在其中实现了一个方法“execute(MethodInvocation m, String mode),如下所示:
在(覆盖方法)“调用”中
这个“MyCommand”被设置为 spring-config 文件中“ServiceClass”的 AOP 拦截器。
现在,问题是;在我的“主”应用程序中,当我从 ClassPathXmlApplicationContext 检索“ServiceClass”并调用一种方法时,它工作正常。但是,如果我尝试调用“ServiceClass”的两个方法,则会引发以下异常:
代码片段:
我花了将近三天的时间试图找出这个异常的原因和解决方案,但没有任何好处。请帮我解决这个问题。我错过了什么?
一如既往,提前感谢
spring-cloud - Hystrix 在回退中访问当前执行状态
我成功配置spring-cloud
(通过spring-cloud-starter-hystrix
)来包装对服务的调用。
这一切都很好,如下所示:
我现在的问题是,我想记录一些关于执行错误的统计信息longRunning()
尝试HystrixRequestLog.getCurrentRequest()
在回退方法中访问会抛出
java.lang.IllegalStateException:必须在每个请求开始时调用 HystrixRequestContext.initializeContext(),才能使用 RequestVariable 功能。
我正在寻找一种简单的方法来记录longRunning
是否调用了回退的异常。
测试v1.0.0.RC2
spring-cloud - 春季云中的 hystrix 回退问题
当我尝试在 Spring Cloud 中使用 HystrixCommand 回退时,方法代理不起作用。方法中抛出的异常没有被 hystrix 命令方面捕获。
我在 Spring Cloud Hystrix 集成中遇到了这个问题。我正在使用 spring cloud 1.0.0.RC2 版本。这是一个复制问题的示例项目。
这是我使用图书馆的方式的问题吗?
spring-boot - Spring Boot + Eureka Server + Hystrix with Turbine:空的turbine.stream
我正在尝试运行 Spring Boot(使用 Spring Cloud)+ Eureka Server + Hystrix Dashboard 和 Turbine 流,但我遇到了一个问题,到目前为止我找不到任何解决方案。我使用 Spring Boot 1.2.1.RELEASE和 Spring Cloud 1.0.0.RC2。这是我所拥有的:
第一个实例正在运行 Eureka 服务器和 Hystrix 仪表板:
在这里您可以找到build.gradle
该实例 - https://gist.github.com/wololock/570272ad7cf2d14a4d3c
Eureka 服务器运行正常,我可以在 eureka 服务器仪表板上看到已注册的实例,我还可以LoadBalancer
使用它的 id 获取注册实例的 URL。到目前为止一切正常。
我有一些使用@EnableHystrix
注释运行的实例,@HystrixCommand
用于定义 Hystrix 必须监视哪些方法。当我将单个实例的 hystrix.stream 的 URL 传递给 Hystrix 仪表板时,我可以看到它运行没有问题。
我也有单独的涡轮服务器,并不复杂:
在这里您可以找到build.gradle
涡轮服务器实例 - https://gist.github.com/wololock/ff0d855b8a890232851e
它使用非常简单的配置,主要基于示例涡轮应用程序提供的配置 - https://github.com/spring-cloud-samples/turbine
按顺序运行这些实例后:
- 尤里卡服务器
- 涡轮服务器
- 发现客户端实例,
我在尤里卡服务器中注册了第二个和第三个实例,涡轮服务器日志说,有一个实例:
从单个实例调用 hystrix.stream 有效,例如curl http://localhost:8885/hystrix.stream
返回:
但是,当我将涡轮机.stream 附加到 hystrix 仪表板时,我什么也得不到。日志说:
如果我这样做,curl http://localhost:8989/turbine.stream
我只会得到:
我的问题是:我在设置和运行时是否遗漏了什么?以前我试图通过在单个实例中拥有尤里卡和涡轮服务器来管理这个,但在那种情况下,涡轮机甚至无法使用正确的应用程序名称在尤里卡中找到注册的应用程序。我在拆分 eureka 和涡轮后取得了进展,但它仍然无法正常工作。
我将不胜感激任何建议。如果您需要更多信息,请告诉我,我可能会错过一些重要的信息。
更新 20150209
按照 Dave 的建议,我application.yml
对turbine-server
. 现在该文件仅包含:
但它不会使turtle.stream 工作。在 Turbo-server 获知 eureka 服务器中的注册客户端后,它会失败并出现以下异常:
我尝试过写作'default'
,default
但不幸的是结果是一样的。
解决方案
感谢 Dave Syer 找到了合适的解决方案。基本上,诀窍是添加:
归档到application.yml
涡轮服务器应用程序实例中。它可能看起来很奇怪,我不相信它会起作用,但确实如此。现在,当我调用我的 hystrix 客户端应用程序时,我得到了hystrix.stream
由该应用程序和turbine.stream
涡轮服务器提供的正确信息。我当前application.yml
的涡轮服务器如下所示:
turbine.appConfig
保存有关 hystrix 客户端的信息(通过它们的 ID)。要将另一个客户端添加到您的涡轮服务器,您必须简单地放置另一个实例 ID,与前一个以逗号分隔。这就是所有人:)