话不多说,先上图(图是丑陋了点,大家别介意哈),这幅图是我根据公司现有的业务设计出来的一个简单的基于springcloud微服务架构图。

在springcloud微服务体系中,我们一般不对外直接暴露服务层的接口,而是中间通过一层代理进行中转,这层代理的好处一个是对外可以隐藏我们内部具体服务的接口,另一个就是我们非常重要的服务的负载均衡,在上图中客户端的所有请求先经过nginx(Nginx集群)经由nginx代理转发后进入springcloud的zuul(zuul集群)路由网关服务,由zuul再去对应具体的服务;我们的所有服务均统一注册到高可用的服务注册发现(eureka server)集群中。

首先介绍一下zuul的功能:

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

好啦,正式开工!

1.首先创建一个项目xx-zuul(名字任意取),引入相关依赖(spring-cloud-starter-netflix-zuul):

<dependencies>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
   </dependency>
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
   </dependency>
   <!--eureka client-->
   <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka</artifactId>
      <version>1.4.4.RELEASE</version>
   </dependency>
   <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
   </dependency>
</dependencies>

2.打开application-dev.properties并加入以下内容:

#端口
server.port=8763
#实例名
spring.application.name=xx-zuul
#注册中心
eureka.server.host=localhost
eureka.server.port=8761
eureka.client.service-url.defaultZone=http://${eureka.server.host}:${eureka.server.port}/eureka/

#路由规则配置
#拦截路径
zuul.routes.demo-springboot.path=/demo/**
#eureka中注册的实例名
zuul.routes.demo-springboot.serviceId=demo-springboot
#实际访问时去除前缀(即:经过zuul转发后会去除掉demo前缀)
zuul.routes.demo-springboot.stripPrefix=true

#连接超时时间
zuul.host.connect-timeout-millis=15000
zuul.host.socket-timeout-millis=10000

#log level
logging.level.root=debug

#开启eureka client健康检查
eureka.client.healthcheck=true
# 续约到期时间(默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=30
# 续约更新时间间隔(默认30秒)
eureka.instance.lease-renewal-interval-in-seconds=10

3.开启zuul代理注解@EnableZuulProxy

@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class Xsignal2ZuulApplication {public static void main(String[] args) {SpringApplication.run(Xsignal2ZuulApplication.class, args);
    }
}

4.最后启动xx-zuul服务,demo-springboot服务,在eureka控制面板查看:

打开浏览器准备访问zuul代理:

看到如图结果表示我们的zuul代理已经生效,成功访问到了demo-springboog项目,庆贺一下吧!

另外,文章开头说道zuul支持过滤功能,即我们可以通过自定义filter继承自ZuulFilter即可:

@Component
public class MyFilter extends ZuulFilter {/*filterType:返回一个字符串代表过滤器的类型,在zuul中定义了四种不同生命周期的过滤器类型,具体如下:
    pre:路由之前
    routing:路由之时
    post: 路由之后
    error:发送错误调用
    filterOrder:过滤的顺序
    shouldFilter:这里可以写逻辑判断,是否要过滤,本文true,永远过滤。
    run:过滤器的具体逻辑。可用很复杂,包括查sql,nosql去判断该请求到底有没有权限访问。
    */

    private static Logger log = LoggerFactory.getLogger(MyFilter.class);
    @Override
    public String filterType() {return FilterConstants.PRE_TYPE;
    }@Override
    public int filterOrder() {return 0;
    }@Override
    public boolean shouldFilter() {return true;
    }@Override
    public Object run() {RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
         Object accessToken = request.getParameter("token");
        if(accessToken == null) {log.warn("token is empty");
            ctx.setSendZuulResponse(false);
            ctx.setResponseStatusCode(401);
            try {ctx.getResponse().getWriter().write("token is empty");
            }catch (Exception e){}return null;
        }
        return null;
    }
}

在filter中我们可以自定义需要过滤的请求,拦截非法请求,权限认证,频控,限流等操作!

springcloud 之 路由网关 zuul相关推荐

  1. SpringCloud教程- 路由网关Zuul (SpringCloud版本Greenwich.SR4)

    文章目录 Zuul简介 创建zuul-gateway工程 服务过滤 代码地址:github-spring-cloud地址 Zuul简介 Zuul是NetFlix开源的微服务网关,它可以和Eureka. ...

  2. 【微服务架构】SpringCloud之路由网关(zuul)

    什么是zuul zuul 是netflix开源的一个API Gateway 服务器, 本质上是一个web servlet应用. Zuul 在云平台上提供动态路由,监控,弹性,安全等边缘服务的框架.Zu ...

  3. SpringCloud之路由网关zuul(五)

    2019独角兽企业重金招聘Python工程师标准>>> 在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础 ...

  4. 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)

    转:https://blog.csdn.net/forezp/article/details/69939114 最新版本: 史上最简单的SpringCloud教程 | 第五篇: 路由网关(zuul)( ...

  5. 第九章:路由网关(Zuul)的使用

    2019独角兽企业重金招聘Python工程师标准>>> 第九章:路由网关(Zuul)的使用 前言 介绍完分布式配置中心,结合前面的文章.我们已经有了一个微服务的框架了,可以对外提供a ...

  6. 带你入门SpringCloud 之 服务网关 Zuul

    前言 服务端提供 RestFul API ,客户端如果想要使用某个服务直接调用服务的API 即可.但是在微服务环境中会有很多的具体服务,而客户端在需要使用众多的服务时在和具体的服务打交道这样虽然可以实 ...

  7. Spring-Cloud 微服务网关Zuul、ZuulFilter过滤器和限流

    微服务网关 一. Zuul网关 1. 创建工程 并导入依赖 2. application.yml 配置文件 3. 启动类添加注解 4. 依次启动服务 5. 进入浏览器访问测试 二. ZuulFilte ...

  8. 【SpringCloud】第五篇: 路由网关(zuul)

    前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具,包括配置管理.服务发现.断路器.路由.微代理.事件总线.全局锁.决策竞选. ...

  9. SpringCloud: 路由网关(zuul)

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...

最新文章

  1. [Linux学习]虚拟机系统与实际系统共享文件的方式
  2. 剑指Offer_编程题_22
  3. ORACLE常用的一些特殊SQL,收藏收藏,下次需要的时候就不用再翻箱倒柜了
  4. [CXF REST标准实战系列] 一、JAXB xml与javaBean的转换
  5. 使用DevExpress.XtraTabbedMdi.XtraTabbedMdiManager控件来加载MDI窗体
  6. rh php70 php fpm,CentOS 7 配置php语言开发环境
  7. 三星S7edge刷极光ROM的总结
  8. 互联网经济催生了一些新职业,带来新机遇!
  9. 其实你不懂我的芯--SIM卡的前世今生
  10. OSPF特殊区域TOTAL STUB配置实验
  11. 2022最新软件测试面试题(含答案)
  12. Cross Domain Knowledge Transfer for Person Re-identification笔记
  13. python后端工程师_Python 招聘:[字节跳动] 后端开发工程师 | Python 技术论坛
  14. CS61A Lab 7
  15. oracle-04045,8170导出(exp)数据报错ORA-04045错误
  16. 服务器cpu散热器性能,用于大型服务器CPU冷却的散热器性能研究.pdf
  17. IOS类似图片验证码的实现
  18. 电子书-阮新波《LCL并网逆变器的控制技术》
  19. 短信后台构架开发—移讯短信系统
  20. 用php处理wps文档,wps怎么解除限制编辑

热门文章

  1. mysql dba管理_Mysql DBA 高级运维学习之路-mysql数据库常用管理应用
  2. mongoDB 小练习
  3. iOS自定义弹出视图、收音机APP、图片涂鸦、加载刷新、文件缓存等源码
  4. 为什么敏捷开发在亚洲实行不了
  5. Intellij IDEA 新建一个EJB工程(三)
  6. Mac OS X安装Lua
  7. 给MVC中的V设计一个框架
  8. 关于计算机与网络导论的论文,计算机科学与导论论文5
  9. Spring源码:IOC容器
  10. cpuz北桥频率和内存频率_内存频率怎样计算?一分钟教会你