• 《springcloud 二》SrpingCloud Zuul 微服务网关搭建


    网关作用

    网关的作用,可以实现负载均衡、路由转发、日志、权限控制、监控等。

    网关与过滤器区别

    网关是拦截所有服务器请求进行控制

    过滤器拦截某单个服务器请求进行控制

    Nginx与Zuul的区别

    Nginx是采用服务器负载均衡进行转发

    Zuul依赖Ribbon和eureka实现本地负载均衡转发

    相对来说Nginx功能比Zuul功能更加强大,能够整合其他语言比如lua脚本实现强大的功能,同时Nginx可以更好的抗高并发,Zuul网关适用于请求过滤和拦截等。

    Zuul网关

    zuul是spring cloud的一个推荐组件,https://github.com/Netflix/zuul

    使用Zuul实现反向代理

    环境搭建
    Maven依赖信息
    <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.0.1.RELEASE</version>
        </parent>
        <!-- 管理依赖 -->
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Finchley.M7</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
            </dependency>
            <!-- SpringBoot整合eureka客户端 -->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            </dependency>
        </dependencies>
        <!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
        <repositories>
            <repository>
                <id>spring-milestones</id>
                <name>Spring Milestones</name>
                <url>https://repo.spring.io/libs-milestone</url>
                <snapshots>
                    <enabled>false</enabled>
                </snapshots>
            </repository>
        </repositories>
    application.yml
    ###注册 中心
    eureka:
      client:
        serviceUrl:
          defaultZone: http://localhost:8100/eureka/
    server:
      port: 80
    ###网关名称
    spring:
      application:
        name: service-zuul
    ### 配置网关反向代理    
    zuul:
      routes:
        api-a:
         ### 以 /api-member/访问转发到会员服务
          path: /api-member/**
          serviceId: app-itmayiedu-member
        api-b:
            ### 以 /api-order/访问转发到订单服务
          path: /api-order/**
          serviceId: app-itmayiedu-order

    使用Zuul整合Ribbon

    Zuul 默认开启了 Ribbon本地负载均衡功能。

    使用Zuul过滤器

    @Component
    public class TokenFilter extends ZuulFilter {
    
        public Object run() throws ZuulException {
            // 获取上下文
            RequestContext currentContext = RequestContext.getCurrentContext();
            HttpServletRequest request = currentContext.getRequest();
            String userToken = request.getParameter("userToken");
            if (StringUtils.isEmpty(userToken)) {
                currentContext.setSendZuulResponse(false);
                currentContext.setResponseStatusCode(401);
                currentContext.setResponseBody("userToken is null");
                return null;
            }
            // 否则正常执行业务逻辑.....
            return null;
        }
    
        // 判断过滤器是否生效
        public boolean shouldFilter() {
    
            return true;
        }
    
        // 过滤器的执行顺序。当请求在一个阶段的时候存在多个多个过滤器时,需要根据该方法的返回值依次执行
        public int filterOrder() {
    
            return 0;
        }
    
        // 过滤器类型 pre 表示在 请求之前进行拦截
        public String filterType() {
    
            return "pre";
        }
    
    }
  • 相关阅读:
    python学习-dict
    python学习
    pycharm 2017版Mac激活码
    Day6_python基础知识<模块学习>
    having 子句
    数据库实例指定
    EXCEL里面单元格内容太多显示不全应该怎么弄。
    你没有权限在此位置保存文件_请与管理员联系的问题解决
    FQ软件
    C#高级编程(中文第七版)
  • 原文地址:https://www.cnblogs.com/a1304908180/p/10676414.html
Copyright © 2020-2023  润新知