热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SpringCloud微服务网关Zuul的作用是什么

这篇文章主要介绍“SpringCloud微服务网关Zuul的作用是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“

这篇文章主要介绍“SpringCloud微服务网关Zuul的作用是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“SpringCloud微服务网关Zuul的作用是什么”文章能帮助大家解决问题。

    网关的作用

    微服务架构中,服务实例的地址可能经常会发生变化,所以我们不能直接将服务的地址暴露出来。如果每一个微服务都直接暴露接口,会导致一系列的问题,比如调用过于复杂,涉及到账户、权限不能统一处理等。另外基于高内聚低耦合的设计准则来讲,我们也应该将内部系统和外部系统做切割。

    因此,这时就需要有一个独立的组件来处理外部的请求,这个组件就是服务网关。服务网关就是为了简化前端的调用逻辑,通常情况下也会实现相关的认证逻辑,根据外部不同的请求响应不同的数据,从而简化内外部系统之间调用的复杂度。

    SpringCloud微服务网关Zuul的作用是什么

    服务网关负责服务请求路由、组合及协议转换。客户端的所有请求都首先经过服务网关,然后由它将请求路由到合适的微服务。服务网关经常会通过调用多个微服务并合并结果来处理一个请求,它可以在系统外部与内部响应之间友好的转换。

    本文将先着重介绍Zuul组件。

    Spring Cloud 网关组件Zuul介绍

    Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 Spring Cloud 前几个版本默认使用的一款提供动态路由微服务网关组件。Zuul 接收所有外来请求,并将请求转发到对应的后端服务。作为一个前置服务,Zuul 旨在实现动态路由,监控,弹性和安全性等功能。

    Zuul 提供了不同类型的 filter 用于处理请求,这些 filter 可以让我们实现以下功能:

    • 权限控制和安全性:可以识别认证需要的信息和拒绝不满足条件的请求。

    • 监控:与边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。

    • 动态路由:根据需要动态地路由请求到后台的不同集群。

    • 压力测试:逐渐增加指向集群的流量,以了解性能。

    • 负载均衡:为每一种负载类型分配对应容量,并弃用超出限定值的请求

    • 静态资源处理:直接在 zuul 处理静态资源的响应,从而避免其转发到内部集群。

    Zuul网关实战

    之前的介绍中,我们启动了注册中心registry,dms服务,和app服务,请求时,直接调用了app服务的接口,app服务又调用了dms服务:

    SpringCloud微服务网关Zuul的作用是什么

    加上网关服务之后,就会变成如下:

    SpringCloud微服务网关Zuul的作用是什么

    接下来,我们创建zuul服务:

    1、创建服务

    创建子模块zuul,pom.xml引入eureka-client 和zuul的依赖

    
                org.springframework.boot
                spring-boot-starter-web
            
            
                org.springframework.cloud
                spring-cloud-starter-netflix-eureka-client
            
            
            
                org.springframework.cloud
                spring-cloud-starter-openfeign
            
            
            
                org.springframework.cloud
                spring-cloud-starter-netflix-zuul
            
            
                javax.servlet
                javax.servlet-api
                3.1.0
            

    2、创建配置文件

    server:
      port: 8004
    spring:
      application:
        name: zuul

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8001/eureka/
    feign:
      hystrix:
        enabled: true
    zuul:
      routes:
        app: #活动
          path: /app/** #配置请求URL的请求规则
          serviceId: app #指定Eureka注册中心中的服务id
        dms: #活动
          path: /dms/** #配置请求URL的请求规则
          serviceId: dms #指定Eureka注册中心中的服务id
    logging:
      pattern:
        console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{15} - %msg%n'

    3、创建Zuul过滤器

    public class MyZuulFilter extends ZuulFilter {
    //    pre :可以在请求被路由之前调用
    //    route :在路由请求时候被调用
    //    post :在route和error过滤器之后被调用
    //    error :处理请求时发生错误时被调用
        @Override
        public String filterType() {
            return "pre";// 前置过滤器
        }
        //通过int值来定义过滤器的执行顺序,优先级为0,数字越大,优先级越低
        @Override
        public int filterOrder() {
            return 0;
        }
        //返回一个boolean类型来判断该过滤器是否要执行,所以通过此函数可实现过滤器的开关
        @Override
        public boolean shouldFilter() {
            return true;//此处为true,说明需要过滤
        }
        //过滤器的具体逻辑。
        @Override
        public Object run() throws ZuulException {
            // 获取上下文
            RequestContext currentContext = RequestContext.getCurrentContext();
            HttpServletRequest request = currentContext.getRequest();
            String accessToken = request.getParameter("accessToken");
            if (StringUtils.isEmpty(accessToken)) {
                //setSendZuulResponse(false)令zuul过滤该请求,不进行路由
                currentContext.setSendZuulResponse(false);
                //设置返回的错误码
                currentContext.setResponseStatusCode(401);
                currentContext.setResponseBody("AccessToken is null");
                return null;
            }
            System.out.println("获取到AccessToken为:"+accessToken);
            // 否则正常执行业务逻辑.....
            return null;
        }
    }

    4、编写启动类

    注意增加@EnableZuulProxy注解

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

    5、启动验证

    这个时候,我们将直接请求app的接口地址,改成网关zuul的地址和端口:http://localhost:8004/app/index

    SpringCloud微服务网关Zuul的作用是什么

    关于“SpringCloud微服务网关Zuul的作用是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程笔记行业资讯频道,小编每天都会为大家更新不同的知识点。


    推荐阅读
    • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
    • Nginx使用(server参数配置)
      本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
    • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
    • XML介绍与使用的概述及标签规则
      本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
    • 如何在服务器主机上实现文件共享的方法和工具
      本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
    • flowable工作流 流程变量_信也科技工作流平台的技术实践
      1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
    • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
    • Voicewo在线语音识别转换jQuery插件的特点和示例
      本文介绍了一款名为Voicewo的在线语音识别转换jQuery插件,该插件具有快速、架构、风格、扩展和兼容等特点,适合在互联网应用中使用。同时还提供了一个快速示例供开发人员参考。 ... [详细]
    • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
    • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
    • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
    • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
    • WebSocket与Socket.io的理解
      WebSocketprotocol是HTML5一种新的协议。它的最大特点就是,服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送 ... [详细]
    • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
    • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
    author-avatar
    用户19910071
    这个家伙很懒,什么也没留下!
    PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有