美文网首页
zuul服务网关

zuul服务网关

作者: 寂静的春天1988 | 来源:发表于2019-05-13 15:02 被阅读0次
    1、zuul快速入门

    pom文件导入依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>
    

    yml文件

    server:
      port: 8083
    spring:
      application:
        name: zuul
    
    zuul:
      routes:
        teacherZuul: #这个是随意起的,表示路由名称
          path: /**  #配置请求url的请求规则
          url: http://127.0.0.1:8081 #真正的微服务地址
    

    启动类

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

    在启动类上加@EnableZuulProxy开启服务网关

    2、面向服务路由

    将上面的代码url改成serviceId
    yml文件

    server:
      port: 8083
    spring:
      application:
        name: zuul
    
    zuul:
      routes:
        teacherZuul: #这个是随意起的,表示路由名称
          path: /**  #配置请求url的请求规则
          #url: http://127.0.0.1:8081 #真正的微服务地址
          service-id: teacher
          
    eureka:
      client:
        register-with-eureka: true #是否将自己注册到eureka,默认为true
        fetch-registry: true #是否从eureka中获得注册信息,默认为true
        service-url:
           defaultZone: http://root:123@127.0.0.1:1234/eureka/
      instance:
        prefer-ip-address: true #将自己的ip注册到eureka服务中
        ip-address: 127.0.0.1
    

    http://127.0.0.1:8083/queryTeacherId?id=1](http://127.0.0.1:8083/queryTeacherId?id=1
    请求上面地址,先经过8083在到达teacher服务

    使用zuul写一个进入方法前判断是否登录的demo

    filter类

    package com.ganlong.filter;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.springframework.stereotype.Component;
    
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    import com.netflix.zuul.exception.ZuulException;
    
    @Component
    public class MyFilter extends ZuulFilter{
    
        /**
         * 返回一个布尔值,表示过滤器是否执行,true执行,false不执行
         */
        @Override
        public boolean shouldFilter() {
            // TODO Auto-generated method stub
            return true;
        }
        /**
         * 过滤器的业务逻辑
         */
        @Override
        public Object run() throws ZuulException {
            RequestContext ctx = RequestContext.getCurrentContext();
            HttpServletRequest request = ctx.getRequest();
            Object accessToken = request.getParameter("token");
            if(accessToken == null) {
                ctx.setSendZuulResponse(false);//过滤该请求,不进行路由
                ctx.setResponseStatusCode(401);//设置响应状态码
                try {
                    ctx.getResponse().getWriter().write("token is empty");
                }catch (Exception e){}
                return null;
            }
            return null;
        }
        /**
         * 通过返回的int来定义过滤器的执行顺序,数字越小优先级越高
         */
        @Override
        public int filterOrder() {
            // TODO Auto-generated method stub
            return 0;
        }
    
        /**
         *   过滤器类型
         * pre:请求被路由之前执行
         * routing:在路由时调用
         * post:在routing和error之后调用
         * error:处理请求发生错误时调用
         */
        @Override
        public String filterType() {
            // TODO Auto-generated method stub
            return "pre";
        }
    
    }
    

    相关文章

      网友评论

          本文标题:zuul服务网关

          本文链接:https://www.haomeiwen.com/subject/dnmlaqtx.html