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 { } }