SpringCloud不归路——Zuul
Zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
作者:dalaoyang
链接:https://www.imooc.com/article/44600
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
Zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
作者:dalaoyang
链接:https://www.imooc.com/article/44600
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作
思维导图
在微服务架构中,Zuul就是守门的大Boss!一夫当关,万夫莫开!
POM引入
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
开启Zuul
@SpringBootApplication @EnableZuulProxy // 开启Zuul的网关功能 public class ZuulDemoApplication { public static void main(String[] args) { SpringApplication.run(ZuulDemoApplication.class, args); } }
配置文件编写
server: port: 10010 #服务端口 spring: application: name: api-gateway #指定服务名
//1 静态路由,无Eureka
zuul:
routes:
user-service: # 这里是路由id,随意写
path: /user-service/** # 这里是映射路径
url: http://127.0.0.1:8081 # 映射路径对应的实际url地址
//2 动态路由,有Eureka
zuul:
routes:
user-service: # 这里是路由id,随意写
path: /user-service/** # 这里是映射路径
serviceId: user-service # 指定服务名称
//3 动态路由一次简化(推荐使用)
zuul:
prefix: /api # 添加路由前缀
routes:
user-service: /user-service/** # 这里是映射路径
//4 最简化,默认无需配置
按服务名约定
如果不把Zuul注册到注册中心就无法做到负载均衡,所以要引入Eureka,在此不做详述
Zuul过滤
继承ZuulFilter抽象类
Zuul过滤器的类型和执行情况
抽象类解析
public abstract ZuulFilter implements IZuulFilter{
//;;; abstract public String filterType();
// abstract public int filterOrder();
// boolean shouldFilter();// 来自IZuulFilter
Object run() throws ZuulException;// IZuulFilter }
自定义业务过滤器写法
@Component public class LoginFilter extends ZuulFilter{ @Override public String filterType() { // 登录校验,肯定是在前置拦截 return "pre"; } @Override public int filterOrder() { // 顺序设置为1 return 1; } @Override public boolean shouldFilter() { // 返回true,代表过滤器生效。 return true; } @Override public Object run() throws ZuulException { // 登录校验逻辑。 // 1)获取Zuul提供的请求上下文对象,上下文中有request、response RequestContext ctx = RequestContext.getCurrentContext(); // 2) 从上下文中获取request对象 HttpServletRequest req = ctx.getRequest(); // 3) 从请求中获取token String token = req.getParameter("access-token"); // 4) 判断 if(token == null || "".equals(token.trim())){ // 没有token,登录校验失败,拦截 ctx.setSendZuulResponse(false); // 返回401状态码。也可以考虑重定向到登录页。 ctx.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value()); } // 校验通过,可以考虑把用户信息放入上下文,继续向后执行 return null; } }
Zuul对于熔断机制和负载均衡的配置
zuul: retryable: true ribbon: ConnectTimeout: 250 # 连接超时时间(ms) ReadTimeout: 2000 # 通信超时时间(ms) OkToRetryOnAllOperations: true # 是否对所有操作重试 MaxAutoRetriesNextServer: 2 # 同一服务不同实例的重试次数 MaxAutoRetries: 1 # 同一实例的重试次数 hystrix: command: default: execution: isolation: thread: timeoutInMillisecond: 6000 # 熔断超时时长:6000ms
Zuul:Zuul 是在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架。Zuul 相当于是设备和 Netflix 流应用的 Web 网站后端所有请求的前门。
作者:dalaoyang
链接:https://www.imooc.com/article/44600
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作


浙公网安备 33010602011771号