最新文章

Spring Cloud Zuul详解

Spring Cloud Zuul详解

Spring Cloud对Netflix Zuul做了封装集成, 使得在Spring Cloud环境中使用Zuul更方便. Netflix Zuul相关分析请看上一篇.

实现

@EnableZuulProxy 与 @EnableZuulServer 二者的区别在于前者使用了服务发现作为路由寻址, 并使用Ribbon做客户端的负载均衡; 后者没有使用. Zuul server的路由都通过ZuulProperties进行配置.

具体实现:

  1. 使用ZuulController(ServletWrappingController的子类)封装ZuulServlet实例, 处理从DispatcherServlet进来的请求.
  2. ZuulHandlerMapping负责注册handler mapping, 将RoutefullPath的请求交由ZuulController处理.
  3. 同时使用ServletRegistrationBean注册ZuulServlet, 默认使用/zuul作为urlMapping. 所有来自以/zuul开头的path的请求都会直接进入ZuulServlet, 不会进入DispatcherServlet.

使用注解

  • @EnableZuulProxy引入了ZuulProxyMarkerConfiguration, ZuulProxyMarkerConfiguration只做了一件事, 实例化了内部类Marker.

    @Configuration
    public class ZuulProxyMarkerConfiguration {
    	@Bean
    	public Marker zuulProxyMarkerBean() {
    		return new Marker();
    	}
    
    	class Marker {
    	}
    }
    
  • @EnableZuulServer引入了ZuulServerMarkerConfiguration, ZuulServerMarkerConfiguration也只做了一件事: 实例化了内部类Marker

    @Configuration
    public class ZuulServerMarkerConfiguration {
    	@Bean
    	public Marker zuulServerMarkerBean() {
    		return new Marker();
    	}
    
    	class Marker {
    	}
    }