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;
}
}
SpringCloud 学习(5) --- Zuul(一)基本概念、配置的更多相关文章
- SpringCloud学习之zuul
一.为什么要有网关 我们先看一个图,如果按照consumer and server(最初的调用方式),如下所示 这样我们要面临如下问题: 1. 用户面临着一对N的问题既用户必须知道每个服务.随着服务的 ...
- SpringCloud学习之Zuul统一异常处理及回退
一.Filter中统一异常处理 其实在SpringCloud的Edgware SR2版本中对于ZuulFilter中的错误有统一的处理,但是在实际开发当中对于错误的响应方式,我想每个团队都有自己的处理 ...
- SpringCloud学习之Zuul路由转发、拦截和熔断处理(七)
Spring Cloud Zuul 服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能. Sp ...
- SpringCloud学习之Bus消息总线实现配置自动刷新(九)
前面两篇文章我们聊了Spring Cloud Config配置中心,当我们在更新github上面的配置以后,如果想要获取到最新的配置,需要手动刷新或者利用webhook的机制每次提交代码发送请求来刷新 ...
- SpringCloud学习笔记-zuul网关
公司目前使用的是dubbo方式实现微服务,想试水改造接口层服务为Spring Cloud, 以下是网络拓补图. 第一层负载均衡可以用nginx或者zuul(即有2层zuul), 本图画的是nginx. ...
- SpringCloud学习成长之路 六 cloud配置中心
一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...
- SpringCloud学习笔记《---06 Config 分布式配置中心---》基础篇
- SpringCloud微服务基础 Eureka、Feign、Ribbon、Zuul、Hystrix、配置中心的基础使用
1.单点系统架构 传统项目架构 传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中. 优点:适合于个人或者小团队开发,不适合大团队开发. 分布式项目架构 根据业务需求进行拆分成N ...
- SpringCloud学习系列之七 ----- Zuul路由网关的过滤器和异常处理
前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...
随机推荐
- 《ucore lab4》实验报告
资源 ucore在线实验指导书 我的ucore实验代码 练习1:分配并初始化一个进程控制块 题目 alloc_proc函数(位于kern/process/proc.c中) 负责分配并返回一个新的str ...
- [转帖]MyCat教程【简单介绍】
MyCat教程[简单介绍] 2019-10-15 10:27:23 波波烤鸭 阅读数 618 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. ...
- STM32之串口编程步骤
串口编程步骤(非中断)如下: 使能GPIO时钟 使能串口时钟 配置TXD为复用功能+推挽 (站在STM32芯片角度) 配置RXD为复用功能+上拉 ( 站在STM32芯片角度) 设置数据帧 OV ...
- docker学习笔记(一)--介绍和基本组成
Docker基本介绍 1.什么是docker docker本身不是容器,是创建容器的工具,是应用容器引擎,将应用程序自动部署到容器的开源引擎. 2.docker的目标特点 简单轻量,快速开发,具备可移 ...
- 海思SDK 与各芯片对照
本文链接:https://blog.csdn.net/liuxizhen2009/article/details/84261221 海思SDK不对外开放. 海思35系列sdk Hi3507 Hi3 ...
- Angular 学习笔记 (Material table sticky 原理)
更新 : 2019-12-03 今天踩坑了, sticky 了解不够深 refer http://www.ruanyifeng.com/blog/2019/11/css-position.html 阮 ...
- 怎样安装ipython
ipython 是一个python的交互式shell, 比默认的python shell更好用, 支持自动补全 / 上下翻等功能. 下面是按照方法: # 通用安装方法 pip install ipy ...
- poj 3252 数位dp
题意:一个二进制的数,如果0的个数大于1的个数,那么我们称这个数为Round Numbers,求给定区间(十进制表示)中Round Numbers的个数 题解:数位dp,不过这里枚举的时候lead标记 ...
- App客户端性能测试点总结
一.内存 测试范围1. 空闲状态下的应用内存消耗情况2. 中等规格状态下的应用内存消耗情况3. 满规格状态下的应用内存消耗情况4. 应用内存峰值情况5. 应用内存泄露情况6. 应用是否常驻内存7. 压 ...
- php上传文件报错以及对应代号信息-转载http://jewel-m.iteye.com/blog/1210344
用PHP上传文件时,我们会用程序去监听浏览器发送过来的文件信息,首先会通 过$_FILES[fieldName]['error']的不同数值来判断此欲上传的文件状态是否正常.$_FILES[field ...