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;
import java.util.Collections;
import java.util.List;
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.zuul.PolarisRibbonRoutingFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
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.route.RibbonCommandFactory;
import org.springframework.context.annotation.Bean;
@ -96,18 +93,14 @@ public class RouterAutoConfiguration {
return new RuleBasedRouterRequestInterceptor(polarisRuleBasedRouterProperties);
}
@SuppressWarnings("rawtypes")
@Autowired(required = false)
private List<RibbonRequestCustomizer> requestCustomizers = Collections.emptyList();
@Bean
@Bean(initMethod = "init")
@ConditionalOnClass(name = "org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter")
public PolarisRibbonRoutingFilter ribbonRoutingFilter(ProxyRequestHelper helper,
RibbonCommandFactory<?> ribbonCommandFactory,
MetadataLocalProperties metadataLocalProperties,
RouterRuleLabelResolver routerRuleLabelResolver,
List<ServletRouterLabelResolver> routerLabelResolvers) {
return new PolarisRibbonRoutingFilter(helper, ribbonCommandFactory,
this.requestCustomizers, metadataLocalProperties, routerRuleLabelResolver, routerLabelResolvers);
return new PolarisRibbonRoutingFilter(helper, ribbonCommandFactory, metadataLocalProperties,
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.MetadataContextHolder;
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.polaris.router.PolarisRouterContext;
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.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.RibbonRequestCustomizer;
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
*/
public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter {
public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter implements BeanFactoryAware {
private static final Logger LOGGER = LoggerFactory.getLogger(PolarisRibbonRoutingFilter.class);
private BeanFactory factory;
private final MetadataLocalProperties metadataLocalProperties;
private final RouterRuleLabelResolver routerRuleLabelResolver;
@ -71,11 +77,10 @@ public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter {
public PolarisRibbonRoutingFilter(ProxyRequestHelper helper,
RibbonCommandFactory<?> ribbonCommandFactory,
List<RibbonRequestCustomizer> requestCustomizers,
MetadataLocalProperties metadataLocalProperties,
RouterRuleLabelResolver routerRuleLabelResolver,
List<ServletRouterLabelResolver> routerLabelResolvers) {
super(helper, ribbonCommandFactory, requestCustomizers);
super(helper, ribbonCommandFactory, Collections.emptyList());
this.metadataLocalProperties = metadataLocalProperties;
this.routerRuleLabelResolver = routerRuleLabelResolver;
@ -96,6 +101,7 @@ public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter {
}
}
@Override
protected RibbonCommandContext buildCommandContext(RequestContext context) {
HttpServletRequest request = context.getRequest();
@ -170,6 +176,11 @@ public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter {
return routerContext;
}
@Override
public void setBeanFactory(BeanFactory beanFactory) throws BeansException {
this.factory = beanFactory;
}
private Map<String, String> getExpressionLabels(HttpServletRequest request, Set<String> labelKeys) {
if (CollectionUtils.isEmpty(labelKeys)) {
return Collections.emptyMap();
@ -177,4 +188,8 @@ public class PolarisRibbonRoutingFilter extends RibbonRoutingFilter {
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;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
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.okhttp.OkHttpLoadBalancingClient;
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.ZuulProperties;
import org.springframework.cloud.netflix.zuul.filters.route.FallbackProvider;
@ -97,8 +94,6 @@ public class PolarisRibbonRoutingFilterTest {
private FallbackProvider fallbackProvider;
@Mock
private PolarisLoadBalancer polarisLoadBalancer;
@Mock
private List<RibbonRequestCustomizer> requestCustomizers;
@BeforeClass
public static void beforeClass() {
@ -127,7 +122,7 @@ public class PolarisRibbonRoutingFilterTest {
@Test
public void testGenRouterContext() {
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(proxyRequestHelper,
ribbonCommandFactory, requestCustomizers, metadataLocalProperties, routerRuleLabelResolver,
ribbonCommandFactory, metadataLocalProperties, routerRuleLabelResolver,
Lists.newArrayList(routerLabelResolver));
Map<String, String> localMetadata = new HashMap<>();
@ -164,8 +159,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, requestCustomizers,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users");
@ -199,8 +194,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, Collections.emptyList(),
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users");
@ -235,8 +230,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, requestCustomizers,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users");
@ -270,8 +265,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, requestCustomizers,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users");
@ -305,8 +300,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, Collections.emptyList(),
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users");
@ -342,8 +337,8 @@ public class PolarisRibbonRoutingFilterTest {
zuulProperties.setThreadPool(new ZuulProperties.HystrixThreadPool());
PolarisRibbonRoutingFilter polarisRibbonRoutingFilter = new PolarisRibbonRoutingFilter(
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, requestCustomizers,
metadataLocalProperties, routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
new ProxyRequestHelper(zuulProperties), ribbonCommandFactory, metadataLocalProperties,
routerRuleLabelResolver, Lists.newArrayList(routerLabelResolver));
MockHttpServletRequest request = new MockHttpServletRequest();
request.setRequestURI("http://" + calleeService + "/users");

Loading…
Cancel
Save