看下面这幅图:
网关到底是干嘛的?有什么用呢?关于网关的功能请看下图:
这里重点介绍Netflix Zuul网关 主要是因为:
zuul 在 Netflix的使用情况(2017)
同时在国内也有很多优秀的应用案例,比如:
如图右侧, 有红绿2个颜色的服务集群,从中可以看出绿色是v1版本,红色是v2版本。可以通过网关控制客户端请求具体请求到红色还是绿色的服务实例。
同上逻辑类似,通过网关配置将请求转发到test环境是服务实例。
同上逻辑类似,通过网关配置将请求转发到有埋点的环境服务实例。
同上逻辑,不影响生产服务实例情况下,网关配置控制部分客户端请求或拟造请求到压力测试环境的服务实例。
客户端有多种不同的设备,通过网关配置,可以将制定的设备请求路由转发到指定环境的服务实例。
如图所示:当请求打到US-West-2
机器是,该机器内的服务实例挂了,但网关可以正常运行,可以通过配置网关,在请求服务实例返回失败的时候,主动再将请求转发到其它服务所在的机器上的网关继续处理,也就是zuul网关集群实现高可用。
import javax.servlet.http.HttpServletRequest;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.context.RequestContext;
public class PreFilter extends ZuulFilter {
@Override
public String filterType() {
return "pre";
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
System.out.println("Request Method : " + request.getMethod() + " Request URL : " + request.getRequestURL().toString());
return null;
}
}
复制代码
因为zuul有可动态发布的过滤器机制,所有可以有一个页面来管理zuul网关的过滤器,使得网关的可定制性,可变性更强大。