feat:move autowired List<RibbonRequestCustomizer> property into PolarisRibbonRoutingFilter's init method.

pull/502/head
jarvisxiong 3 years ago
parent 3a515314af
commit fb79e8f9b4

@ -18,7 +18,6 @@
package com.tencent.cloud.polaris.router.config; package com.tencent.cloud.polaris.router.config;
import java.util.Collections;
import java.util.List; import java.util.List;
import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; import com.tencent.cloud.common.metadata.config.MetadataLocalProperties;
@ -35,11 +34,9 @@ import com.tencent.cloud.polaris.router.interceptor.RuleBasedRouterRequestInterc
import com.tencent.cloud.polaris.router.spi.ServletRouterLabelResolver; import com.tencent.cloud.polaris.router.spi.ServletRouterLabelResolver;
import com.tencent.cloud.polaris.router.zuul.PolarisRibbonRoutingFilter; import com.tencent.cloud.polaris.router.zuul.PolarisRibbonRoutingFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.netflix.ribbon.RibbonClients; import org.springframework.cloud.netflix.ribbon.RibbonClients;
import org.springframework.cloud.netflix.ribbon.support.RibbonRequestCustomizer;
import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper; import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper;
import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandFactory;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
@ -96,18 +93,14 @@ public class RouterAutoConfiguration {
return new RuleBasedRouterRequestInterceptor(polarisRuleBasedRouterProperties); return new RuleBasedRouterRequestInterceptor(polarisRuleBasedRouterProperties);
} }
@SuppressWarnings("rawtypes") @Bean(initMethod = "init")
@Autowired(required = false)
private List<RibbonRequestCustomizer> requestCustomizers = Collections.emptyList();
@Bean
@ConditionalOnClass(name = "org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter") @ConditionalOnClass(name = "org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter")
public PolarisRibbonRoutingFilter ribbonRoutingFilter(ProxyRequestHelper helper, public PolarisRibbonRoutingFilter ribbonRoutingFilter(ProxyRequestHelper helper,
RibbonCommandFactory<?> ribbonCommandFactory, RibbonCommandFactory<?> ribbonCommandFactory,
MetadataLocalProperties metadataLocalProperties, MetadataLocalProperties metadataLocalProperties,
RouterRuleLabelResolver routerRuleLabelResolver, RouterRuleLabelResolver routerRuleLabelResolver,
List<ServletRouterLabelResolver> routerLabelResolvers) { List<ServletRouterLabelResolver> routerLabelResolvers) {
return new PolarisRibbonRoutingFilter(helper, ribbonCommandFactory, return new PolarisRibbonRoutingFilter(helper, ribbonCommandFactory, metadataLocalProperties,
this.requestCustomizers, metadataLocalProperties, routerRuleLabelResolver, routerLabelResolvers); routerRuleLabelResolver, routerLabelResolvers);
} }
} }

@ -32,6 +32,7 @@ import com.netflix.zuul.context.RequestContext;
import com.tencent.cloud.common.metadata.MetadataContext; import com.tencent.cloud.common.metadata.MetadataContext;
import com.tencent.cloud.common.metadata.MetadataContextHolder; import com.tencent.cloud.common.metadata.MetadataContextHolder;
import com.tencent.cloud.common.metadata.config.MetadataLocalProperties; import com.tencent.cloud.common.metadata.config.MetadataLocalProperties;
import com.tencent.cloud.common.util.BeanFactoryUtils;
import com.tencent.cloud.common.util.expresstion.ServletExpressionLabelUtils; import com.tencent.cloud.common.util.expresstion.ServletExpressionLabelUtils;
import com.tencent.cloud.polaris.router.PolarisRouterContext; import com.tencent.cloud.polaris.router.PolarisRouterContext;
import com.tencent.cloud.polaris.router.RouterRuleLabelResolver; import com.tencent.cloud.polaris.router.RouterRuleLabelResolver;
@ -39,6 +40,9 @@ import com.tencent.cloud.polaris.router.spi.ServletRouterLabelResolver;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;
import org.springframework.cloud.netflix.ribbon.support.RibbonCommandContext; import org.springframework.cloud.netflix.ribbon.support.RibbonCommandContext;
import org.springframework.cloud.netflix.ribbon.support.RibbonRequestCustomizer; import org.springframework.cloud.netflix.ribbon.support.RibbonRequestCustomizer;
import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper; import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper;
@ -57,10 +61,12 @@ import static org.springframework.cloud.netflix.zuul.filters.support.FilterConst
* *
* @author jarvisxiong 2022-08-04 * @author jarvisxiong 2022-08-04
*/ */
public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter { public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter implements BeanFactoryAware {
private static final Logger LOGGER = LoggerFactory.getLogger(PolarisRibbonRoutingFilter.class); private static final Logger LOGGER = LoggerFactory.getLogger(PolarisRibbonRoutingFilter.class);
private BeanFactory factory;
private final MetadataLocalProperties metadataLocalProperties; private final MetadataLocalProperties metadataLocalProperties;
private final RouterRuleLabelResolver routerRuleLabelResolver; private final RouterRuleLabelResolver routerRuleLabelResolver;
@ -71,11 +77,10 @@ public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter {
public PolarisRibbonRoutingFilter(ProxyRequestHelper helper, public PolarisRibbonRoutingFilter(ProxyRequestHelper helper,
RibbonCommandFactory<?> ribbonCommandFactory, RibbonCommandFactory<?> ribbonCommandFactory,
List<RibbonRequestCustomizer> requestCustomizers,
MetadataLocalProperties metadataLocalProperties, MetadataLocalProperties metadataLocalProperties,
RouterRuleLabelResolver routerRuleLabelResolver, RouterRuleLabelResolver routerRuleLabelResolver,
List<ServletRouterLabelResolver> routerLabelResolvers) { List<ServletRouterLabelResolver> routerLabelResolvers) {
super(helper, ribbonCommandFactory, requestCustomizers); super(helper, ribbonCommandFactory, Collections.emptyList());
this.metadataLocalProperties = metadataLocalProperties; this.metadataLocalProperties = metadataLocalProperties;
this.routerRuleLabelResolver = routerRuleLabelResolver; this.routerRuleLabelResolver = routerRuleLabelResolver;
@ -96,6 +101,7 @@ public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter {
} }
} }
@Override @Override
protected RibbonCommandContext buildCommandContext(RequestContext context) { protected RibbonCommandContext buildCommandContext(RequestContext context) {
HttpServletRequest request = context.getRequest(); HttpServletRequest request = context.getRequest();
@ -170,6 +176,11 @@ public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter {
return routerContext; return routerContext;
} }
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.factory = beanFactory;
}
private Map<String, String> getExpressionLabels(HttpServletRequest request, Set<String> labelKeys) { private Map<String, String> getExpressionLabels(HttpServletRequest request, Set<String> labelKeys) {
if (CollectionUtils.isEmpty(labelKeys)) { if (CollectionUtils.isEmpty(labelKeys)) {
return Collections.emptyMap(); return Collections.emptyMap();
@ -177,4 +188,8 @@ public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter {
return ServletExpressionLabelUtils.resolve(request, labelKeys); return ServletExpressionLabelUtils.resolve(request, labelKeys);
} }
private void init() {
this.requestCustomizers = BeanFactoryUtils.getBeans(factory, RibbonRequestCustomizer.class);
}
} }

@ -18,9 +18,7 @@
package com.tencent.cloud.polaris.router.zuul; package com.tencent.cloud.polaris.router.zuul;
import java.util.Collections;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@ -53,7 +51,6 @@ import org.mockito.junit.MockitoJUnitRunner;
import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient; import org.springframework.cloud.netflix.ribbon.apache.RibbonLoadBalancingHttpClient;
import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpLoadBalancingClient; import org.springframework.cloud.netflix.ribbon.okhttp.OkHttpLoadBalancingClient;
import org.springframework.cloud.netflix.ribbon.support.RibbonCommandContext; import org.springframework.cloud.netflix.ribbon.support.RibbonCommandContext;
import org.springframework.cloud.netflix.ribbon.support.RibbonRequestCustomizer;
import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper; import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper;
import org.springframework.cloud.netflix.zuul.filters.ZuulProperties; import org.springframework.cloud.netflix.zuul.filters.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider; import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
@ -97,8 +94,6 @@ public class PolarisRibbonRoutingFilterTest {
private FallbackProvider fallbackProvider; private FallbackProvider fallbackProvider;
@Mock @Mock
private PolarisLoadBalancer polarisLoadBalancer; private PolarisLoadBalancer polarisLoadBalancer;
@Mock
private List<RibbonRequestCustomizer> requestCustomizers;
@BeforeClass @BeforeClass
public static void beforeClass() { public static void beforeClass() {
@ -127,7 +122,7 @@ public class PolarisRibbonRoutingFilterTest {
@Test @Test
public void testGenRouterContext() { public void testGenRouterContext() {
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(proxyRequestHelper, PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(proxyRequestHelper,
ribbonCommandFactory, requestCustomizers, metadataLocalProperties, routerRuleLabelResolver, ribbonCommandFactory, metadataLocalProperties, routerRuleLabelResolver,
Lists.newArrayList(routerLabelResolver)); Lists.newArrayList(routerLabelResolver));
Map<String, String> localMetadata = new HashMap<>(); Map<String, String> localMetadata = new HashMap<>();
@ -164,8 +159,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool()); zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter( PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, requestCustomizers, new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver)); routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users"); request.setRequestURI("http://" + calleeService + "/users");
@ -199,8 +194,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool()); zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter( PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, Collections.emptyList(), new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver)); routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users"); request.setRequestURI("http://" + calleeService + "/users");
@ -235,8 +230,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool()); zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter( PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, requestCustomizers, new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver)); routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users"); request.setRequestURI("http://" + calleeService + "/users");
@ -270,8 +265,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool()); zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter( PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, requestCustomizers, new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver)); routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users"); request.setRequestURI("http://" + calleeService + "/users");
@ -305,8 +300,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool()); zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter( PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, Collections.emptyList(), new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver)); routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users"); request.setRequestURI("http://" + calleeService + "/users");
@ -342,8 +337,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool()); zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter( PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, requestCustomizers, new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver)); routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest(); MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users"); request.setRequestURI("http://" + calleeService + "/users");

Loading…
Cancel
Save