SpringCloud 学习(5) --- Zuul(一)基本概念、配置

[TOC]

Spring Cloud

  • eureka:注册中心

    • 服务端:提供注册
    • 客户端:进行注册
  • ribbon:负载均衡(集群)
  • Hystrix:熔断器,执行备选方案
  • Feign:远程调用
  • Zuul:网关,统一入口。

1.1、一夫当关,万夫莫开---Zuul网关

  • 网关:程序统一入口。主要功能:服务分发(动态路由),服务鉴权等

    • Zuul是Netflix孵化的一个致力于"网关"的解决方案的开源组件
    • Zuul在动态路由、监控、弹性、服务治理、安全等方面有着重要作用。
    • Zuul底层是Servlet,本质组件是一系列Filter构成的责任链

Zuul具备的功能

  • 认证、鉴权
  • 压力控制
  • 灰度发布
  • 动态路由
  • 负载削减
  • 静态响应处理
  • 主动流量控制

1.2、Zuul入门案例--路由转发

  • 需求
//已有访问路径
http://localhost:8080/user
//通过网关希望访问路径
http://localhost:10010/service/user

面向服务的路由

创建zuul_demo

pom

 <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!--添加eureka客户端-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>

yml

server:
  port: 10010
spring:
  application:
    name: zuuldemo2
#网关配置:访问路径 和 服务路径 对应关系
zuul:
  preifx: /api
  routes:
    userservice:
      path: /userservice/**       #访问路径
      #url: http://localhost:8080  #服务路径
      serviceId: userservice      #服务名称时
#eureka配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka

开启网关代理注解@EnableZuulProxy

package com.czxy;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

/**
 * @author 庭前云落
 * @Date 2019/12/12 17:01
 * @description
 */
@SpringBootApplication
@EnableZuulProxy      //开启zuul代替
@EnableEurekaClient   //开启eureka客户端
public class ZuulApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulApplication.class,args);
    }
}

1.3、路由前缀

  • 路由前缀:用于维护版本号或项目名
  • 修改yml文件,进行配置
    zuul:
      prefix: /api
    

路由通配符

规则 解释 示例
/** 匹配任意数据量的路径与字符 /client/aa,/client/aa/bb/cc
/* 匹配任意数量的字符 /client/aa,/client/aaaaaaaaaaaaaa
/? 匹配单个字符 /client/a,/client/b,/client/c

1.4、Zuul过滤器

1.4.1概述

  • 编写过滤器,继承父类:ZuulFilter
  • 常见方法:
    • filterType() 过滤器类型,取值:"pre"
    • filterOrder() 过滤器顺序,取值:1
    • shouldFilter() 是否执行,取值:true
    • run() 执行业务逻辑

1.4.2自定义过滤器

  • 将过滤器的实现,添加到spring容器中,zuul将自动启用过滤器

    • 过滤器父类:ZuulFilter
    • 工具类(请求上下文对象):RequestContext
    • 特殊请求头:Authorization

package com.czxy.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;

/**
 * @author 庭前云落
 * @Date 2019/12/12 18:07
 * @description
 */
@Component
public class LoginFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";  //路由之前执行
    }

    @Override
    public int filterOrder() {
        return 1;   //排序
    }

    @Override
    public boolean shouldFilter() {
        return true; //是否进行过滤,true将执行run()方法
    }

    @Override
    public Object run() throws ZuulException {
    //获得一个特殊请求头,判断是否有值:有返回null(放行),没有 响应状态码401
        //1 获得工具类 (获得上下文对象)
        RequestContext requestContext = RequestContext.getCurrentContext();
        //2 通过工具类 获得请求对象
        HttpServletRequest request = requestContext.getRequest();
        //3 通过request对象获得特殊请求头
        String token = request.getHeader("authorization");

        //判断
        if(token == null || "".equals(token)) {
            //没有token返回401,关闭响应
            requestContext.setSendZuulResponse(false);
            requestContext.setResponseStatusCode(401);
        }
        //放行
        return null;
    }
}

来源:SEO公司

原文地址:https://www.cnblogs.com/1994jinnan/p/12037483.html

时间: 2024-08-30 16:42:57

SpringCloud 学习(5) --- Zuul(一)基本概念、配置的相关文章

SpringCloud学习系列-zuul路由网关

zuul路由网关   1.是什么 Zuul包含了对请求的路由和过滤两个最主要的功能:    其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验.服务聚合等功能的基础. Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得. 注意:Zuul服务最终还是会注册进Eureka 提供=代理+路由+过滤

SpringCloud学习之Zuul路由转发、拦截和熔断处理(七)

Spring Cloud Zuul 服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能. Spring Cloud Netflix中的Zuul就担任了这样的一个角色,为微服务架构提供了前门保护的作用,同时将权限控制这些较重的非业务逻辑内容迁移到服务路由层面,使得服务集群主体能够具备更高的可复用性和可测试性. 在Spring Cloud体系中, Spring Cloud Zuul 封装了Zuu

springCloud学习05之api网关服务zuul过滤器filter

前面学习了zuul的反向代理.负载均衡.fallback回退.这张学习写过滤器filter,做java web开发的对filter都不陌生,那就是客户端(如浏览器)发起请求的时候,都先经过过滤器filter做一些相关的校验或业务判断(如登录.权限等),zuul也同样提供了过滤器功能.只要继承ZuulFilter类即可. 通过前文的介绍,我们对于Zuul的第一印象通常是这样的:它包含了对请求的路由和过滤两个功能,其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础:而过

SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理

前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由网关的过滤器Filter以及异常处理的教程. SpringCloud Zuul Filter 介绍 过滤器概述 Zuul的中心是一系列过滤器,能够在HTTP请求和响应的路由过程中执行一系列操作. 以下是Zuul过滤器的主要特征: 类型:通常在应用过滤器时在路由流程中定义阶段(尽管它可以是任何自定义字

caffe学习(1):多平台下安装配置caffe

caffe学习(1):多平台下安装配置caffe 提到deep learning, caffe的大名自然是如雷贯耳,当然,除了caffe之外,还有很多其他的框架,如torch,mxnet...但是,就我自己这一个月的实验以及师兄的结论都是,caffe得出的实验performance要高于别的框架,可能是C++的威力吧~笑 OK,接下来准备在这个系列分享我使用和学习caffe的一些经验,首先自然是框架的配置了.这里我们分享一下在windows10和ubuntu14.04虚拟机下的Caffe配置(:

CKEditor学习笔记2(CKEditor基本配置修改)

第二篇,围绕这5个问题进行基本配置: 1.自定义ToolbarSet,去掉一些功能 2.加上几种常用的字体 3.修改"回车"和"Shift+回车"的换行行为 4.修改编辑区样式文件 5.更换表情图片 这些信息的配置,可以通过config.js文件进行,当然也可以创建自己的配置文件. 可以参考我的步骤: 1.首先创建一个目录custom,接着在该目录内新建一个myConfig.js配置文件. 2.JavaScript调用方式二(上一篇内容),修改为: CKEDITOR

SpringCloud学习之Ribbon

一.负载均衡与Ribbon 负载均衡,在集群中是很常见的一个“名词”,顾名思义是根据一定的算法将请求分摊至对应的服务节点上,常见的算法有如下几种: 轮询法:所有请求被依次分发到每台应用服务器上,每台服务器需要处理的请求数目都相同,适合所有服务器硬件都相同的场景 随机法:请求被随机分配到各个应用服务器,在许多场合下,这种方案都很简单实用. 源地址哈希(Hash)法:将请求来源的IP地址进行Hash计算,得到对应的服务器,这样来自同一个IP的请求总在同一个服务器上处理 加权法:根据应用服务器配置的情

SpringCloud学习系列之三----- 断路器Hystrix和断路器监控Dashboar

前言 本篇主要介绍的是SpringCloud中的断路器(Hystrix)和断路器指标看板(Dashboard)的相关使用知识. SpringCloud Hystrix Hystrix 介绍 Netflix创建了一个名为Hystrix的库,它实现了断路器模式.主要的目的是为了解决服务雪崩效应的一个组件,是保护服务高可用的最后一道防线. 开发准备 开发环境 JDK:1.8 SpringBoot:2.1.1.RELEASE SpringCloud:Finchley 注:不一定非要用上述的版本,可以根据

SpringCloud学习心得—1.2—Eureka注册中心的密码认证、高可用的设置

SpringCloud学习心得—1.2—Eureka注册中心的密码认证.高可用的设置 这是相关代码 链接 Eureka开启密码配置 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> 向properties添加密码与用户名 spr