• springcloud之zuul和config-server


    1.zuul相关介绍

    zuul是springcloud的组件之一,用来作为请求的网关:

    所有从设备或网站来的请求都会经过Zuul到达后端的Netflix应用程序。作为一个边界性质的应用程序,Zuul提供了动态路由、监控、弹性负载和安全功能。Zuul底层利用各种filter实现如下功能:

    • 认证和安全 识别每个需要认证的资源,拒绝不符合要求的请求。
    • 性能监测 在服务边界追踪并统计数据,提供精确的生产视图。
    • 动态路由 根据需要将请求动态路由到后端集群。
    • 压力测试 逐渐增加对集群的流量以了解其性能。
    • 负载卸载 预先为每种类型的请求分配容量,当请求超过容量时自动丢弃。
    • 静态资源处理 直接在边界返回某些响应。

    zuul的底层过滤器有前置过滤器pre,后置过滤器post,错误过滤器 errorFilter,还可以之定义过滤器

    1.实现zuul,搭建一个网关

    1.导入zuul的依赖

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

     2.在主配置类上面开启网关反向代理

    @EnableZuulProxy

    3.配置配置文件yml,需要将网关模块注册到注册中心eureka

    eureka:
    client:
    serviceUrl:
    defaultZone: http://localhost:1010/eureka/
    instance:
    prefer-ip-address: true #定义ip到注册中心注册
    instance-id: zuul-client:1020 #使用id的方式注册
    server:
    port: 1020
    spring:
    application:
    name: zuul-client #给网关客户端在erueka服务器取个名字
    zuul:
    ignored-services: "*"
    routes:
    systemmanage-server: "/system/**"

    4.自定义网关,写一个自定义类,继承ZuulFilter,覆写四个方法,一个是顺序,一个是类型,一个是返回boolean结果,一个是根据boolean结果的值判断是否执行run()方法
    false,不执行run方法,true执行run方法
    @Component
    public class LoginCheckFilter extends ZuulFilter {
    @Override
    public String filterType() {
    return PRE_TYPE;
    }

    @Override
    public int filterOrder() {
    return 3;
    }

    @Override
    public boolean shouldFilter() {
    //获取上下文对象
    RequestContext currentContext = RequestContext.getCurrentContext();
    //获取请求对象
    HttpServletRequest request = currentContext.getRequest();
    //通过请求对象获取资源路径
    String requestURI = request.getRequestURI();
    //判断请求路径是否包含login
    if(requestURI.toUpperCase().contains("LOGIN")){
    return false;
    }
    return true;//返回true执行下面的run方法
    }

    @Override
    public Object run() throws ZuulException {
    //获取上下文对象
    RequestContext currentContext = RequestContext.getCurrentContext();
    //获取请求对象
    HttpServletRequest request = currentContext.getRequest();
        //获取响应对象
    HttpServletResponse response = currentContext.getResponse();
        //设置返回类型和编码
    response.setContentType("application/json;charset = utf-8");
    Map<String,Object>jsonMap = new HashMap<>();
    jsonMap.put("success", false);
    jsonMap.put("msg", "请先登录。。。。");
    //获取请求头
    String header = request.getHeader("x-token");
    if(StringUtils.isBlank(header)){
    //
    try {
    response.getWriter().print(JSON.toJSONString(jsonMap));//这里使用了阿里巴巴的fastjson包,帮我们处理返回json,将对象转为json字符串
    } catch (IOException e) {
    e.printStackTrace();
    }
    currentContext.setSendZuulResponse(false);//如果是false,直接返回响应结果,下面的代码再不执行
    }
    return null;
    }
    }

    2.使用配置中心config-server

    介绍:配置中心的作用是从远程仓库中拉取到指向配置中心的配置文件,而配置中心又是指向远程仓库的,所以微服务根据,在远程厂库的配置文件的名字,就能够通过配置中心这个桥梁拉取到自己的配置。

    1.要使用远程仓库,需要使用第三方的仓库如github,或者码云,如何在码云上面创建仓库就不再叙述了

    2.在项目里面新建一个配置中心模块 config-server

    3.导入依赖

    <dependencies>
    <!-- Config-Server 依赖 -->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    </dependencies>

    4.主配置类开启配置中心
    @EnableConfigServer
    5.配置yml文件,指向远程仓库
    instance:
    prefer-ip-address: true #使用ip地址注册
    instance-id: config-server #指定服务的id
    server:
    port: 5000
    spring:
    application:
    name: config-server
    cloud:
    config:
    server:
    git:
    uri: https://gitee.com/huang__ming/springcloud-config.git #指向码云仓库,这个就是远程仓库的地址
    username: 1214491701@qq.com
    password: asd19930256

    2.搭建配置中心的客户端

    1.导入依赖

    <!-- Config-Client 依赖 -->
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-client</artifactId>
    </dependency>

    2.修改application.yml文件文件名为bootstrap.yml

    3.将客户端的配置,配置到码云的仓库中(在仓库中创建一个文件zuul-client-dev.yml)

    eureka:
    client:
    serviceUrl:
    defaultZone: http://localhost:1010/eureka/
    instance:
    prefer-ip-address: true #定义ip到注册中心注册
    instance-id: zuul-client:1020
    server:
    port: 1020
    spring:
    application:
    name: zuul-client
    zuul:
    ignored-services: "*"
    routes:
    systemmanage-server: "/system/**"

    4.配置修改文件名后的yml文件,路径指向配置文件的地址

    spring:
    cloud:
    config:
    uri: http://localhost:5000
    name: zuul-client
    profile: dev



    5.测试,启动注册中心服务,启动配置中心微服务,启动网关微服务,浏览器输入localhost:5000/zuul-client.dev.yml,如果能够读取到远程仓库的
    文件内容说明配置中心集成成功



  • 相关阅读:
    Form组件
    LAMP+Varnish的实现
    缓存反向代理-Varnish
    CDN初识
    HTTP缓存初探
    Keepalived搭建主从架构、主主架构实例
    实现高可用-Keepalived
    nginx负载均衡实例
    lvs集群实现lvs-dr模型和lvs-nat模型
    LVS介绍
  • 原文地址:https://www.cnblogs.com/19930909a/p/12121373.html
Copyright © 2020-2023  润新知