1-SpringCloud中的Zuul使用
1.1-Zuul的Maven依赖
<!--引入 zuul-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
1.2-主启动类添加注解
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@SpringBootApplication//
@EnableZuulProxy//
public class SpringCloudZuulDomeApplication {
public static void main(String[] args) {
SpringApplication.run(SpringCloudZuulDomeApplication.class, args);
}
}
2-源码分析
2.1-@EnableZuulProxy注解
@EnableCircuitBreaker//开启断路器(hystrix)
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ZuulProxyMarkerConfiguration.class)//引入ZuulProxyMarkerConfiguration类
public @interface EnableZuulProxy {
}
//ZuulProxyMarkerConfiguration新建个Marker的bean,让ZuulProxyMarkerConfiguration 配置生效
//后面的Zuul配置会根据是否有这个Maker对象而使配置生效(ZuulProxyAutoConfiguration配置类)
@Configuration(proxyBeanMethods = false)
public class ZuulProxyMarkerConfiguration {
@Bean
public Marker zuulProxyMarkerBean() {
return new Marker();
}
class Marker {
}
}
2.2-Zuul的自动配置类
spring.factories中的自动配置类
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.cloud.netflix.zuul.ZuulServerAutoConfiguration,\
org.springframework.cloud.netflix.zuul.ZuulProxyAutoConfiguration
//@SpringBootApplication注解会读取spring.factories中的配置类,进行自动配置
org.springframework.cloud.netflix.zuul.ZuulProxyAutoConfiguration的父类是org.springframework.cloud.netflix.zuul.ZuulServerAutoConfiguration,先看看 ZuulServerAutoConfiguration
2.2.1-ZuulServerAutoConfiguration.java
ZuulServerAutoConfiguration类,初始化了ZuulHandlerMapping、ZuulController、ZuulServlet、zuulProperties
2.2.2-ZuulProxyAutoConfiguration.java
ZuulProxyAutoConfiguration类,其重要的一点是会初始化RibbonRoutingFilter,PreDecorationFilter,SimpleHostRoutingFilter