zoukankan      html  css  js  c++  java
  • Zuul路由网关

    Zuul是什么

      Zuul包含了对请求的路由和过滤两个最主要的功能:
        其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验、服务聚合等功能的基础.

      Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。

      注意:Zuul服务最终还是会注册进Eureka

      提供=代理+路由+过滤三大功能

    Zuul案例

      创建eureka

        结果图

          

        导入依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <!--eureka依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies>

        application.yml文件

    server:
      port: 1001
    eureka:
      client:
        ##不向服务中心注册自己
        register-with-eureka: false
        ##表明自己是注册中心
        fetch-registry: false
        #配置客户端访问的地址
        service-url:
          defaultZone: http://localhost:1001/eureka
      instance:
        #eureka服务端的实例名称
        hostname: eureka1001.com

        启动类

    @SpringBootApplication
    @EnableEurekaServer     //服务注册中心
    public class SpringcloudEurekaServerApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(SpringcloudEurekaServerApplication.class, args);
        }
    
    }

        效果图

          

      创建生产者

        结构图

          

        导入依赖

     <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!--eureka依赖-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
                <version>1.4.7.RELEASE</version>
            </dependency>
        </dependencies>

        application.yml文件

    spring:
      application:
        #配置服务器名称
        name: eureka-provider
    
    server:
      port: 2001
    
    eureka:
      client:
        #找到注册中心地址
        service-url:
          defaultZone: http://localhost:1001/eureka

        service接口

    public interface DoSomeService {
    
        public String doSome();
    
    }

        serviceImpl接口层

    @RestController
    public class DoServiceImpl implements DoSomeService {
    
        @RequestMapping("/doSome")
        @Override
        public String doSome() {
            System.out.println("======doSome=======");
            return "doSome";
        }
    
    }

        启动类

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

        效果

          

          

      创建zuul

        结构图

          

        导入依赖

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-config-server</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
                <exclusions>
                    <exclusion>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    
            <!--eureka依赖-->
            <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-netflix-zuul</artifactId>
            </dependency>
    
        </dependencies>

        application.yml

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

        filter文件

    package com.cloud.springcloud_zuul.filter;
    
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    import com.netflix.zuul.exception.ZuulException;
    import org.springframework.stereotype.Component;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.IOException;
    @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;
        }
    }

        启动类

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

        结果图

          

          

  • 相关阅读:
    插入排序Java实现
    WMI控制IIS(2)
    WMI控制IIS
    C语言中用qsort()快速排序
    list_for_each引起的问题
    c++数组地址
    Valgrind 使用简单说明检查内存泄露
    firefox 在UBUNTU下编译
    内存泄漏检测umdh
    ubuntu GIT 安装与使用
  • 原文地址:https://www.cnblogs.com/wnwn/p/12074091.html
Copyright © 2011-2022 走看看