我们与第三方服务器通信,该服务器最终将我们的请求转发到相应的服务器(以serverName作为参数)。可用的服务器存储在我们的服务中。
我们希望将断路器模式应用于这些服务器中的每一个。当前,我们在最右边有两个服务器(两个断路器,应用于我们服务器中的两种不同方法)。但是稍后在第三方服务器上可以添加更多服务器,并将此更改通知我们。
我们希望为此新服务器创建一个新的断路器。
我们不想中断API-0的电路。我们希望在引入新服务器时即时创建断路器。
假设api的格式如下:GET API-0 / {serverName}
然后我们要
API-0 / SERVER-1的CircuitBreaker1
API-0 / SERVER-2的CircuitBreaker2
...等等
我们不想对正在运行的服务进行代码更改。 如果引入了新服务器,我们会收到通知。 使用该通知,我们想要创建一个新的断路器
用于API-0 / SERVER-3的CircuitBreaker3
这是我们目前拥有的。问题是,这只会创建一个断路器实例,因此,如果其中任何一台服务器(1、2或3)关闭,它将打开。
@CircuitBreaker(name="api0")
public Response getData(String serverName, payload){
return callThirdParty(serverName, payload);
}
我们要为每个服务器维护单独的断路器(使用serverName)。这些服务器可以在运行时创建,因此我们不能为每个服务器都提供seapate函数。
答案 0 :(得分:0)
在 Spring Boot 中,断路器的名称可以是一个 SpEL 表达式:
@CircuitBreaker(name="#root.args[0]")
public Response getData(String serverName, payload){
return callThirdParty(serverName, payload);
}
这将使用方法的第一个参数作为断路器的名称。 CircuitBreaker 实例是即时创建的,并使用您的应用程序配置文件中定义的默认 CircuitBreakerConfig。