[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公司

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

  1. SpringCloud学习之zuul

    一.为什么要有网关 我们先看一个图,如果按照consumer and server(最初的调用方式),如下所示 这样我们要面临如下问题: 1. 用户面临着一对N的问题既用户必须知道每个服务.随着服务的 ...

  2. SpringCloud学习之Zuul统一异常处理及回退

    一.Filter中统一异常处理 其实在SpringCloud的Edgware SR2版本中对于ZuulFilter中的错误有统一的处理,但是在实际开发当中对于错误的响应方式,我想每个团队都有自己的处理 ...

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

    Spring Cloud Zuul 服务网关是微服务架构中一个不可或缺的部分.通过服务网关统一向外系统提供REST API的过程中,除了具备服务路由.均衡负载功能之外,它还具备了权限控制等功能. Sp ...

  4. SpringCloud学习之Bus消息总线实现配置自动刷新(九)

    前面两篇文章我们聊了Spring Cloud Config配置中心,当我们在更新github上面的配置以后,如果想要获取到最新的配置,需要手动刷新或者利用webhook的机制每次提交代码发送请求来刷新 ...

  5. SpringCloud学习笔记-zuul网关

    公司目前使用的是dubbo方式实现微服务,想试水改造接口层服务为Spring Cloud, 以下是网络拓补图. 第一层负载均衡可以用nginx或者zuul(即有2层zuul), 本图画的是nginx. ...

  6. SpringCloud学习成长之路 六 cloud配置中心

    一.简介 在分布式系统中,由于服务数量巨多,为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件.在Spring Cloud中,有分布式配置中心组件spring cloud config ...

  7. SpringCloud学习笔记《---06 Config 分布式配置中心---》基础篇

  8. SpringCloud微服务基础 Eureka、Feign、Ribbon、Zuul、Hystrix、配置中心的基础使用

    1.单点系统架构 传统项目架构 传统项目分为三层架构,将业务逻辑层.数据库访问层.控制层放入在一个项目中. 优点:适合于个人或者小团队开发,不适合大团队开发. 分布式项目架构 根据业务需求进行拆分成N ...

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

    前言 在上篇中介绍了SpringCloud Zuul路由网关的基本使用版本,本篇则介绍基于SpringCloud(基于SpringBoot2.x,.SpringCloud Finchley版)中的路由 ...

随机推荐

  1. python scipy包进行GO富集分析p值计算

    最近总是有需要单独对某一个类型的通路进行超几何分布的p值计算,这里记录一下python包的计算方法 使用scipy的stat里面的hypergeom.sf方法进行富集分析的p值计算 hsaxxxxx ...

  2. 031 Android 异步任务(AsyncTask)

    1.介绍 AsyncTask(了解即可),重点掌握Handler+Thread 2.实现方法 3.执行步骤 4.java后台 package com.lucky.test36asynctask; im ...

  3. [转帖]Dockerfile: ENTRYPOINT和CMD的区别

    Dockerfile: ENTRYPOINT和CMD的区别 https://zhuanlan.zhihu.com/p/30555962 在我们查阅Dockerfile的官方文档时, 有可能发现一些命令 ...

  4. [ES] - 图形化界面工具

    推荐更新: Windows平台为 ElasticSearch 6.x 安装 Head 客户端插件 elasticsearch-head A web front end for an Elasticse ...

  5. 大数据架构(PB级)

    1.随着互联网快速发展,数据量的快速膨胀,我们日增3000多亿数据量,因此需要针对PB级存储.几百TB的增量数据处理架构设计 2.系统逻辑划分总图: 暂不便透露 3.系统架构图: 4.大数据计算引擎我 ...

  6. jpa简单demo调试druid

    Druid连接池配置见https://www.cnblogs.com/blindjava/p/11504524.html pom <dependency> <groupId>m ...

  7. python3+django报错testserver

    manage.py testserver --addrport 127.0.0.1 报错 查看其它项目 manage.py runserver --addrport 127.0.0.1 正常 查找配置 ...

  8. Django框架下报的版本问题

    报错环境 python=3.6.5,django=2.2,PyMySQL=0.9.3 …… django.core.exceptions.ImproperlyConfigured: mysqlclie ...

  9. PB在已经存在的datawindow中添加数据列的方法

    打开数据窗口,点击Data按钮 进入到数据源定义画板,选择要新增的列后,不要保存文件,直接点关闭,在提示框选是就可以了 新增的列值存不到数据库中,如果需要更新数据库中的值则:需要在数据窗口画板下,点击 ...

  10. Dockerfile编写,以及设置一个自启动脚本

    FROM:指定基础镜像,必须为第一个命令 MAINTAINER: 维护者信息 RUN:构建镜像时执行的命令 ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问 ...