zoukankan      html  css  js  c++  java
  • spring clound之Zuul 组件

    微服务治理的在演变的过程中需要由一个统一的收集器分发到各个服务。然而Nginx是可以帮我们实现该需求逻辑,但是呢,Nginx恰巧只能静态的配置相应的转发,实现该需求也比较依赖于运维的配合,也很难做到进行比较好参数组装。比如在签名校验,登录校验,请求头参数校验等。一般来说,我们这些非业务的处理,需要由统一一个服务管理,以便插拔式的服务更好适用。做到业务分离才是真正的微服务。所以可以用网关gateway可以作为微服务的入口,spring Clound Zuul提供过滤器的机制。如下为Zuul具体的了解
    Zuul maven包
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zuul</artifactId>
    </dependency>
    实践步骤: 
    开启Zuul的功能
    @EnableZuulProxy
    /**
    *
    * 功能描述:
    *
    * @作者 jimw 创建时间: 2018-07-18
    *
    */
    @EnableZuulProxy
    @SpringBootApplication
    @EnableWebMvc
    @ImportResource({ "classpath:spring-config.xml" })
    public class GuessGatewaytMain{
    /**
    * 测试参数包装器
    */
    @Bean
    public TestParamFilter testParamFilter() {
    return new TestParamFilter();
    }
     
    public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(GuessGatewaytMain.class, args);
    SpringContextUtil.setApplicationContext(context);
     
    }
    }
     
    其中TestParamFilter 拦截器可以作为zuul的处理
     
    package com.jingbei.guess.web.filter.pre;
     
    import javax.servlet.http.HttpServletRequest;
     
    import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
     
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
     
    import lombok.extern.slf4j.Slf4j;
     
    /**
    *
    * @author jim 2018-07-18
    ZuulFilter 包含了4个抽象方法
    1.String filterType();
    2. int filterOrder();
    3.Object run();
    4.boolean shouldFilter();
    * 测试拦截器
    */
    @Slf4j
    public class TestParamFilter extends ZuulFilter {
     
    /**拦截器 是否需要拦截*/
    @Override
    public boolean shouldFilter() {
    return true;
    }
     
    /**
    * 参数包装
    * */
    @Override
    public Object run() {
    //参数获取可以对对应的请求方式进行封装
    RequestContext ctx = RequestContext.getCurrentContext();
    HttpServletRequest servletRequest = ctx.getRequest();
    String uri = servletRequest.getRequestURI();
    log.info("uri:{}",uri);
    return null;
    }
     
    /**
    * 拦截类型其中包含 pots,pre,route,error
    post:在route跟error过滤器志辉调用,也就是结果回来的处理
    pre:请求前调用
    route:路由请求时调用
    error:失败的时候调用
    */
    @Override
    public String filterType() {
    return FilterConstants.PRE_TYPE;
    }
     
    /**
    * 优先级级别 允许负数数据越小则优先,反之其然
    */
    @Override
    public int filterOrder() {
    return Integer.MIN_VALUE;
    }
     
    }
    
     
    最后需要在配置zuul的参数
    zuul.routes.user-service.path = /user/**
    zuul.routes.user-service.url = ${guess-user-api}
    guess-user-api=http://192.168.0.1:22010
    如有错漏,烦请大佬们指正。
    参考文献:书籍:spring clound 微服务实践
  • 相关阅读:
    关于position定位
    获取滚动条距离的兼容问题
    margin取百分值
    float 与 display:inline-block
    Object.getOwnPropertyNames()
    正则表达式的方法:replace,match,test(replace参数可以是回调函数)
    offset / scroll / client Left / Top
    client / page / offset / screen X / Y
    原生js贪吃蛇
    Functional PHP 5.3 Part I
  • 原文地址:https://www.cnblogs.com/jimw/p/9329216.html
Copyright © 2011-2022 走看看