fix PolarisFeignCircuitBreaker.Builder

pull/917/head
seanyu 3 years ago
parent 60eb0a46f4
commit 31fd9b16e1

@ -18,9 +18,11 @@
package com.tencent.cloud.polaris.circuitbreaker.config; package com.tencent.cloud.polaris.circuitbreaker.config;
import com.tencent.cloud.polaris.circuitbreaker.feign.PolarisCircuitBreakerNameResolver; import com.tencent.cloud.polaris.circuitbreaker.feign.PolarisCircuitBreakerNameResolver;
import com.tencent.cloud.polaris.circuitbreaker.feign.PolarisFeignCircuitBreaker;
import com.tencent.cloud.polaris.circuitbreaker.feign.PolarisFeignCircuitBreakerTargeter; import com.tencent.cloud.polaris.circuitbreaker.feign.PolarisFeignCircuitBreakerTargeter;
import feign.Feign; import feign.Feign;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory; import org.springframework.cloud.client.circuitbreaker.CircuitBreakerFactory;
@ -29,6 +31,7 @@ import org.springframework.cloud.openfeign.FeignClientFactoryBean;
import org.springframework.cloud.openfeign.Targeter; import org.springframework.cloud.openfeign.Targeter;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
/** /**
* PolarisCircuitBreakerFeignClientAutoConfiguration. * PolarisCircuitBreakerFeignClientAutoConfiguration.
@ -47,8 +50,16 @@ public class PolarisCircuitBreakerFeignClientAutoConfiguration {
} }
@Bean @Bean
@ConditionalOnBean(CircuitBreakerFactory.class)
public Targeter polarisFeignCircuitBreakerTargeter(CircuitBreakerFactory circuitBreakerFactory, CircuitBreakerNameResolver circuitBreakerNameResolver) { public Targeter polarisFeignCircuitBreakerTargeter(CircuitBreakerFactory circuitBreakerFactory, CircuitBreakerNameResolver circuitBreakerNameResolver) {
return new PolarisFeignCircuitBreakerTargeter(circuitBreakerFactory, circuitBreakerNameResolver); return new PolarisFeignCircuitBreakerTargeter(circuitBreakerFactory, circuitBreakerNameResolver);
} }
@Bean
@Scope("prototype")
@ConditionalOnBean(CircuitBreakerFactory.class)
public Feign.Builder circuitBreakerFeignBuilder() {
return PolarisFeignCircuitBreaker.builder();
}
} }

@ -16,8 +16,8 @@ public class PolarisFeignCircuitBreaker {
/** /**
* @return builder for Feign CircuitBreaker integration * @return builder for Feign CircuitBreaker integration
*/ */
public static PolarisFeignCircuitBreaker.Builder builder(Feign.Builder delegateBuilder) { public static PolarisFeignCircuitBreaker.Builder builder() {
return new PolarisFeignCircuitBreaker.Builder(delegateBuilder); return new PolarisFeignCircuitBreaker.Builder();
} }
/** /**
@ -25,10 +25,7 @@ public class PolarisFeignCircuitBreaker {
*/ */
public static final class Builder extends Feign.Builder { public static final class Builder extends Feign.Builder {
private final Feign.Builder delegateBuilder; public Builder() {
public Builder(Feign.Builder delegateBuilder) {
this.delegateBuilder = delegateBuilder;
} }
private CircuitBreakerFactory circuitBreakerFactory; private CircuitBreakerFactory circuitBreakerFactory;
@ -66,9 +63,9 @@ public class PolarisFeignCircuitBreaker {
} }
public Feign build(final FallbackFactory<?> nullableFallbackFactory) { public Feign build(final FallbackFactory<?> nullableFallbackFactory) {
delegateBuilder.invocationHandlerFactory((target, dispatch) -> new PolarisFeignCircuitBreakerInvocationHandler( this.invocationHandlerFactory((target, dispatch) -> new PolarisFeignCircuitBreakerInvocationHandler(
circuitBreakerFactory, feignClientName, target, dispatch, nullableFallbackFactory, circuitBreakerNameResolver, this.decoder)); circuitBreakerFactory, feignClientName, target, dispatch, nullableFallbackFactory, circuitBreakerNameResolver, this.decoder));
return delegateBuilder.build(); return this.build();
} }
} }

@ -26,10 +26,10 @@ public class PolarisFeignCircuitBreakerTargeter implements Targeter {
@Override @Override
public <T> T target(FeignClientFactoryBean factory, Feign.Builder feign, FeignContext context, public <T> T target(FeignClientFactoryBean factory, Feign.Builder feign, FeignContext context,
Target.HardCodedTarget<T> target) { Target.HardCodedTarget<T> target) {
if (!(feign instanceof FeignCircuitBreaker.Builder)) { if (!(feign instanceof PolarisFeignCircuitBreaker.Builder)) {
return feign.target(target); return feign.target(target);
} }
PolarisFeignCircuitBreaker.Builder builder = PolarisFeignCircuitBreaker.builder(feign); PolarisFeignCircuitBreaker.Builder builder = (PolarisFeignCircuitBreaker.Builder) feign;
String name = !StringUtils.hasText(factory.getContextId()) ? factory.getName() : factory.getContextId(); String name = !StringUtils.hasText(factory.getContextId()) ? factory.getName() : factory.getContextId();
Class<?> fallback = factory.getFallback(); Class<?> fallback = factory.getFallback();
if (fallback != void.class) { if (fallback != void.class) {

Loading…
Cancel
Save