Spring Cloud Zuul详解
Spring Cloud对Netflix Zuul做了封装集成, 使得在Spring Cloud环境中使用Zuul更方便. Netflix Zuul相关分析请看上一篇.
实现
@EnableZuulProxy 与 @EnableZuulServer
二者的区别在于前者使用了服务发现作为路由寻址, 并使用Ribbon做客户端的负载均衡; 后者没有使用.
Zuul server的路由都通过ZuulProperties进行配置.
具体实现:
- 使用
ZuulController(ServletWrappingController的子类)封装ZuulServlet实例, 处理从DispatcherServlet进来的请求. ZuulHandlerMapping负责注册handler mapping, 将Route的fullPath的请求交由ZuulController处理.- 同时使用
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 { } }
