• zuul组件的使用


    定义一个模块添加zuul组件

     同时引入了依赖

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

    zuul
    1.引入zuul的启动器

    如果只是使用 zuul的 路由转发功能,不需要其他的代码,只需要在配置文件中配合就行,他有四种配置方法。
    2.配置:

    1):
    zuul.routes.<路由名称>.path=/service-provider/**
    zuul.routes.<路由名称>.url=http://localhost:8082
    2):
    zuul.routes.<路由名称>.path=/service-provider/**
    zuul.routes.<路由名称>.serviceId=service-provider
    3):
    zuul.routes.服务名=/service-provider/** *******************     最常使用
    4):
    不用配置,默认就是服务id开头路径

    3.@EnableZuulProxy

    在引导类上添加注解,启用zuul组件

    @SpringBootApplication
    @EnableZuulProxy  // 启用zuul网管组件
    public class ZuulApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ZuulApplication.class, args);
        }
    
    }

    上面的是没有使用eureka注册的例子

    注册到eureka注册中心,可以自动分发,负载均衡

    1.添加eureka依赖

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

    2.启用eureka组件

    @SpringBootApplication
    @EnableZuulProxy  // 启用zuul网管组件
    @EnableDiscoveryClient // 启用eureka组件
    public class ZuulApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ZuulApplication.class, args);
        }
    
    }

    zuul 的过滤器:

    要继承一个类   ZuulFilter  这个类实现四个方法

    filterType:pre route post error
    filterOrder:返回值越小优先级越高
    shouldFilter:是否执行run方法。true执行
    run:具体的拦截逻辑

    注意:最后要把这个自己的filter放入容器中   @Component

    @Component
    public class MyFilter extends ZuulFilter {
        /**
         * 定义filter的类型 ,有四种 :pre(前置) post(后置) route(路由中) error(错误)
         * @return 根据返回值 判定方法类型
         */
        @Override
        public String filterType() {
            return "pre"; // 证明是前置filter
        }
    
        /**
         * filter 的级别,数值越低,优先级越高
         * @return
         */
        @Override
        public int filterOrder() {
            return 10;
        }
    
        /**
         * 是否执行run方法。true执行
         * @return
         */
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        /**
         * 具体的拦截逻辑
         * @return
         * @throws ZuulException
         */
        @Override
        public Object run() throws ZuulException {
            // 如果要过滤登录
            //初始化context上下文对象,
            RequestContext context = RequestContext.getCurrentContext();
            HttpServletRequest request = context.getRequest();
            String toker = request.getParameter("toker");
            if (StringUtils.isBlank(toker)){
                // false为拦截 ,表示不往后转发请求了
                context.setSendZuulResponse(false);
                // 设置响应的状态码
                context.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
                // 响应的内容
                context.setResponseBody("无效的身份");
            }
    
            // 返回null 表示filter 什么都不做
            return null;
        }
    }



    过滤器:
    创建一个类继承ZuulFilter基类
    重写四个方法
    filterType:pre route post error
    filterOrder:返回值越小优先级越高
    shouldFilter:是否执行run方法。true执行
    run:具体的拦截逻辑

  • 相关阅读:
    linux中内存使用,swap,cache,buffer的含义总结
    haproxy启动时提示失败
    pcs与crmsh命令比较
    用yum下载rpm包(不安装)到指定目录
    Openstack的镜像属性
    ceph 对接openstack liberty
    ceph 创建和删除osd
    linux之fstab文件详解
    OpenStack Swift集群部署流程与简单使用
    swift(Object Storage对象存储服务)(单节点)
  • 原文地址:https://www.cnblogs.com/bozhengheng/p/12838684.html
Copyright © 2020-2023  润新知