springcloud 入门 7 (zuul路由网关)

时间:2023-03-09 15:07:59
springcloud 入门 7 (zuul路由网关)

Zuul简介:

  Zuul的主要功能是路由转发和过滤器。路由功能是微服务的一部分,比如/api/user转发到到user服务,/api/shop转发到到shop服务。zuul默认和Ribbon结合实现了负载均衡的功能。

    zuul有以下功能:

      • Authentication
      • Insights
      • Stress Testing
      • Canary Testing
      • Dynamic Routing
      • Service Migration
      • Load Shedding
      • Security
      • Static Response handling
      • Active/Active traffic management

Zuul搭建:

  第一步:引入相应的pom

    springcloud 入门 7 (zuul路由网关)

  第二步:在启动类上启动zuul

    springcloud 入门 7 (zuul路由网关)

  第三步:配置文件配置,向注册中心注册。自身做一个客户端。

    springcloud 入门 7 (zuul路由网关)

  第四步:启动测试:  六个服务以此启动,最好先启动服务端,再启动其他客户端

    springcloud 入门 7 (zuul路由网关)

    springcloud 入门 7 (zuul路由网关)

zuul过滤:

  zuul主要是路由和过滤,上面已经介绍路由,下面介绍过滤。在过滤中类似servlet的过滤器,拦截器。在修改的时候可以做一些二次开发:

 package com.huhy.springcloud.filter;

 import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.stereotype.Component; /**
* @author : huhy on 2018/9/4.
* @Project_name:springcloud_self
* @LOCAL:com.huhy.springcloud.filter
* @description:{todo}
*/
@Component
public class MyFilter extends ZuulFilter {
/**
* @author huhy
* @ClassName:MyFilter
* @date 2018/9/4 13:58
* @Description: 返回一个字符串代表过滤器的类型
*/
@Override
public String filterType() {
/**
* pre: 路由之前
* routing:路由之时
* post: 路由之后
* error: 发送错误调用
* */
System.out.println("filterType--------------");
return "pre";
}
/**
* @author huhy
* @ClassName:MyFilter
* @date 2018/9/4 13:59
* @Description: 过滤顺序
*/
@Override
public int filterOrder() {
System.out.println("filterOrder--------------");
return ;
}
/**
* @author huhy
* @ClassName:MyFilter
* @date 2018/9/4 13:59
* @Description: 这里可以写逻辑判断,是否要过滤,本文true,永远过滤。
*/
@Override
public boolean shouldFilter() {
System.out.println("shouldFilter--------------");
return true;
}
/**
* @author huhy
* @ClassName:MyFilter
* @date 2018/9/4 13:59
* @Description:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。
*/
@Override
public Object run() throws ZuulException {
System.out.println("run--------------");
return "run";
}
}

注意:

  1>feign 和 ribbon也是负载,那么和zuul有啥侧重点呢?

    ribbon的负载在于相同服务之间的负载,zuul多用于在多个服务之间传递请求。 zuul 多以集群的形式存在。   

  2> zuul在springcloud充当的角色(借用网上一张图)

    springcloud 入门 7 (zuul路由网关)