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

如何创建动态hystrixcommand threadPoolKey

尤祖鹤
2023-03-14

我正在使用hystrix在我的springboot服务中实现断路器概念。我在需要在发生阈值故障数的情况下节流外部服务调用的方法上使用的HystrixCommand注释如下所示:

 @HystrixCommand(commandKey = "myCommandKey",
            groupKey = "myGroupKey",
            threadPoolKey = "myThreadPoolKey")
    public String myHystrixMethod(String someParam) { ....}

现在,myHystrixMethod驻留的服务由不同的客户端调用。根据调用服务的客户机的类型,有一个逻辑来调用为该特定客户机指定的后端服务。

我想做的是将特定客户机调用的所有线程(请求)注册到它自己的hystrix线程池中。这意味着,来自客户机A的请求将在hystrix线程池中为客户机A注册,而对于客户机B的请求将在hystrix线程池中仅为客户机B注册。这将确保客户端B对我的服务的请求不会因为客户端A中的故障而被抑制。

为此,我可以为每个客户机创建单独的服务方法(如上所示),并相应地命名hystrix线程池。然而,使用这种方法,每当有一个新的客户端时,我将不得不修改源代码以添加它的服务方法。

有没有一种方法可以基于参数(在本例中为客户端ID)动态创建@HystrixCommand注释中的选项?

共有1个答案

壤驷穆冉
2023-03-14

我不知道用Hystrix库做这件事的任何方法,但由于您已经要求任何其他电路断路器实现可以做这件事,这里是基于Resilience4J库的解决方案。

在应用程序上下文中,您可以使用客户端的默认配置注册circuitbreakerregistrybean。

@Bean
public CircuitBreakerRegistry circuitBreakerRegistry() {
    CircuitBreakerConfig config = CircuitBreakerConfig.custom()
            .failureRateThreshold(35)
            .ringBufferSizeInClosedState(1000)
            .ringBufferSizeInHalfOpenState(100)
            .waitDurationInOpenState(Duration.ofMinutes(1))
            .build();
    return CircuitBreakerRegistry.of(config);
}

然后,您只需将此注册表注入到您的服务中,在受保护的方法中,您就可以为您需要的任何客户机获取CB。

CircuitBreaker circuitBreaker = circuitBreakerRegistry.circuitBreaker("ClientA");

现在您可以使用任何可选的circuitbreaker方法:iscallpermited()executerunnable()或任何其他方法。

有关更多信息,请参阅用户指南。

 类似资料:
  • 问题内容: 我在使用primefaces树实现实现动态树结构时遇到了一些麻烦。在primeface提供的展示柜中,代码的结构如下所示。但是,这是非常静态的。我试图弄清楚如何处理从数据库中获取的数据,在编译时树的深度是未知的。 我以为我可能需要某种递归方法来实现此目的,但我无法完全理解实现的样子。 有什么想法吗? 以下是primefaces的示例代码 问题答案:

  • 问题内容: 我需要旋转div并停止在特定位置(该值将从服务器接收)。 我尝试使用本机JS进行旋转和停止,但它占用了我的CPU大量时间。 我可以旋转CSS动画,但是我需要创建一个类,该类将动态描述停止动画的位置。就像是 提前致谢 问题答案: 好吧,我认为动态创建 它们 并不容易, 因为它们必须是硬编码的,所以它们不灵活。 过渡稍微容易一些,因为它们可以优雅地响应JavaScript进行的CSS更改。

  • 我正在创建一个Android应用程序,为了使其工作,我需要动态创建一个多维(2D): 我把代码留给您,以便让您理解它是如何被排序的,这样您就可以清除它来添加这个特性(可能我不仅想要代码本身的装饰,还想要对其中的内容有一个几乎详细的解释,我会非常感谢的! http://imgur.com/a/ajyoe

  • 我有一个按钮和一个文本框。当我在textbox中放置一个值并单击此按钮时,将创建一个新按钮,该值填充在textbox中,但我希望当我再次单击Button1时,应该还有一个按钮,或者我们可以说如何移动上一个按钮的位置? 请帮我解决这个问题。提前谢了。

  • 本文向大家介绍JavaScript如何动态创建table表格,包括了JavaScript如何动态创建table表格的使用技巧和注意事项,需要的朋友参考一下 两种JavaScript动态创建table表格的方法,分享给大家,具体实现如下 方法一:最原始的方法,创建一一元素 方法二:利用table对象里面含有的函数:插入行和插入列 动态的创建和删除: 创建表格,通过输入的值: 删除行: 删除列: 完整

  • 问题内容: 我有一个可以在MongoDB和mongoose上的node.js上运行的应用程序。我的应用程序只是发送/删除/编辑表单数据,为此,我有这样的猫鼬模型: 而且效果很好! 现在,我想向表单添加一个功能,以便用户可以添加一个或多个字段来表单并在其中输入文本并发布。在客户端上创建动态功能没问题,但是我知道我的mongoose.model必须正确构造。我的问题是:如何将变量值(动态创建的表单数据