• springcloud-路由网关(zuul)


    一、什么是网关

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

    二、创建service项目

    略参考上面博客

    三、创建生产者项目 springcloud_eureka_member并启动

    1 导入pom文件节点

     <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.4.RELEASE</version>
      </parent>
    
    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    
        <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
    
    <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
    
    
    <dependencyManagement>
        <dependencies>
          <!--springCloud依赖-->
          <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Greenwich.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
          </dependency>
        </dependencies>
      </dependencyManagement>

    2 创建application.yml文件

      ##应用名称
      spring:
        application:
          name: member-server
    
          #声明当前 eurakaserver端口号
      server:
        port: 9001
      #配置eureka
      eureka:
        client:
    
    
          #配置地址
          service-url:
            defaultZone: http://localhost:8888/eureka

    3 创建service层接口

    public interface MemberService {
        public String getMember();
    }

    4 创建service层接口实现类

    @RestController
    public class MemberServiceImpl implements MemberService {
    
        @RequestMapping("/member")
        @Override
        public String getMember() {
            System.out.println("member getMember方法");
            return "member";
        }
    }

    5  创建启动程序类StartProvider

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

    6 运行效果

    四、创建消费者项目 springcloud_eureka_order

    1 创建application.yml文件

      ##应用名称
      spring:
        application:
          name: order-server
    
          #声明当前 eurakaserver端口号
      server:
        port: 9002
      #配置eureka
      eureka:
        client:
          #配置地址
          service-url:
            defaultZone: http://localhost:8888/eureka

    2 创建service层接口

    @FeignClient("member-server")
    public interface OrderService {
    
        @RequestMapping("/member")
        public String getOrder();
    }

    3 创建启动程序类

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

    4 运行效果

     五、创建项目springcloud_zuul

    1 创建application.yml文件

    eureka:
      client:
        service-url:
          defaultZone: http://localhost:8888/eureka
    server:
      port: 10001
    spring:
      application:
        name: zuul
    ##配置zuul网关
    zuul:
      routes:
        api-a:
          path: /member-zuul/**
          service-id: member-server
        api-b:
          path: /order-zuul/**
          service-id: order-server

    2 创建启动程序类

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

    3  运行效果

    4 创建服务过滤类 

    @Component
    public class MyZuulFilter extends ZuulFilter {
        /**
         * 过滤类型
         * @return
         */
        @Override
        public String filterType() {
            return "pre";
        }
    
        /**
         * 请求过滤顺序
         * @return
         */
        @Override
        public int filterOrder() {
            return 0;
        }
    
        /**
         *
         * @return
         */
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        @Override
        public Object run() throws ZuulException {
            //获取token参数
            RequestContext rc = RequestContext.getCurrentContext();
            HttpServletRequest request = rc.getRequest();
    
            String token = request.getParameter("token");
            if(token!=null){
                return null;
            }
            //表示不进行路由
            rc.setSendZuulResponse(false);
            rc.setResponseStatusCode(401);
    
            try {
                rc.getResponse().setContentType("text/html;charset=utf-8");
                rc.getResponse().getWriter().write("没有传递正确参数,请校验后重试~");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return null;
        }
    }

    5 运行效果当加上token时

    当没有token时

  • 相关阅读:
    AC620教程 第十五节 8位7段数码管驱动设计与验证
    解决NIOS II工程移动在磁盘上位置后project无法编译问题
    基于FPGA的XPT2046触摸控制器设计
    Altera SOPC FrameBuffer系统设计教程
    【小梅哥SOPC学习笔记】SOPC开发常见问题及解决办法集锦
    ChromeDriver的安装和使用
    Selenium的安装和使用
    Requests的安装和使用
    安装python3
    centos安装后的个人工具
  • 原文地址:https://www.cnblogs.com/szhhhh/p/12069023.html
Copyright © 2020-2023  润新知