Hystrix的架构和数十种服务

问题描述 投票:0回答:1

我正在维护一种可能与至少80个外部服务进行通信的体系结构,并且我们在这些服务上使用Hystrix。

这些服务有一些共同点:其中一些服务的后端具有相同的后端-意味着与它们通信的方式是相同的,因此我们有一个与它们通信的驱动程序类,唯一改变的是IP地址。我们在该驱动程序中使用一个HystrixCommand。

我的问题从这里开始。如果具有相同后端的那些服务之一变得不稳定,那么Hystrix会破坏所有其他服务,而不是我们想要的那个服务。

据我了解,我实际上需要为其中每个创建一个HystrixCommand。

这实际上是我需要做的?我需要创建80个HystrixCommand实现吗?关于如何避免需要创建所有这80个HystrixCommands的任何建议?

architecture hystrix circuit-breaker
1个回答
0
投票

好,所以我设法解决了我的问题。

我犯了一个错误,就是没有命名HystrixCommand。

默认情况下,命令名称是从类名称派生的:

getClass().getSimpleName();

因此,所有服务都有一个HystrixCommand,导致所有这些服务断路。

通过命名HystrixCommand,即使许多不同的服务使用相同的驱动程序类,我也可以通过服务达到我想要的隔离级别。我只需要根据外部服务的名称来命名命令。

要显式定义名称,请通过HystrixCommand或HystrixObservableCommand构造函数将其传入:

public CommandHelloWorld(String name) {
    super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("ExampleGroup"))
            .andCommandKey(HystrixCommandKey.Factory.asKey("HelloWorld")));
    this.name = name;
}

来源:https://github.com/Netflix/Hystrix/wiki/How-To-Use#command-name

© www.soinside.com 2019 - 2024. All rights reserved.