Spring Cloud入门-Zuul服务网关(Hoxton版本),从草根到百万年薪程序员的十年风雨之路
开头
Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。Spring更是避免了重复造轮子的工作并跟随着互联网行业的发展做出不断的更新 ,很多研发人员把spring看作心目中最好的Java项目,没有之一。
**可以毫不夸张的说,Spring重新定义了Java,**所以这是重点也是难点,工作中必须会,面试时肯定考,不过很多人在面试的时候在简历上写着熟悉Spring,但也不过只是会用SSM,在这个基础上做crud罢了,对于Spring全家桶里面其他技术点真的有所掌握吗?
Spring系列包含非常多的项目,可以满足Java开发中的方方面面,先来看下常用框架的知识点汇总:

本文分享的内容是:阿里“重推”的Spring+Spring Boot+Spring Cloud Alibaba学习手册,如果你拿到这份宝典认真的看完后,那你对于Spring的掌握绝对不是“熟悉”的程度,接下来不多哔哔,直接上干货!(完整版内容请阅读至文末获取!)
|6|Spring Cloud入门-OpenFeign服务消费者(Hoxton版本)|[(()|
|7|Spring Cloud入门-Zuul服务网关(Hoxton版本)|[(()|
|8|Spring Cloud入门-Config分布式配置中心(Hoxton版本)|[(()|
|9|Spring Cloud入门-Bus消息总线(Hoxton版本)|[(()|
|10|Spring Cloud入门-Sleuth服务链路跟踪(Hoxton版本)|[(()|
|11|Spring Cloud入门-Consul服务注册发现与配置中心(Hoxton版本)|[(()|
|12|Spring Cloud入门-Gateway服务网关(Hoxton版本)|[(()|
|13|Spring Cloud入门-Admin服务监控中心(Hoxton版本)|[(()|
|14|Spring Cloud入门-Oauth2授权的使用(Hoxton版本)|[(()|
|15|Spring Cloud入门-Oauth2授权之JWT集成(Hoxton版本)|[(()|
|16|Spring Cloud入门-Oauth2授权之基于JWT完成单点登录(Hoxton版本)|[(()|
|17|Spring Cloud入门-Nacos实现注册和配置中心(Hoxton版本)|[(()|
|18|Spring Cloud入门-Sentinel实现服务限流、熔断与降级(Hoxton版本)|[(()|
|19|Spring Cloud入门-Seata处理分布式事务问题(Hoxton版本)|[(()|
|20|Spring Cloud入门-汇总篇(Hoxton版本)|[(()|
[](()摘要
Spring Cloud Zuul 是Spring Cloud Netflix 子项目的核心组件之一,可以作为微服务架构中的API网关使用,支持动态路由与过滤功能,本文将对其用法进行详细介绍。
[](()Zuul简介
API网关为微服务架构中的服务提供了统一的访问入口,客户端通过API网关访问相关服务。API网关的定义类似于设计模式中的门面模式,它相当于整个微服务架构中的门面,所有客户端的访问都通过它来进行路由及过滤。它实现了请求路由、负载均衡、校验过滤、服务容错、服务聚合等功能。
[](()创建一个zuul-proxy模块
这里我们创建一个zuul-proxy模块来演示zuul的常用功能。
[](()在pom.xml中添加相关依赖
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
spring-cloud-starter-netflix-zuul
[](()在application.yml中进行配置
server:
port: 8801
spring:
application:
name: zuul-proxy
eureka:
client:
register-with-eureka: true
fetch-registry: true
service-url:
defaultZone: http://localhost:8001/eureka/
[](()在启动类上添加@EnableZuulProxy注解来启用Zuul的API网关功能
@EnableZuulProxy
@EnableDiscoveryClient
@SpringBootApplication
public class ZuulProxyApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulProxyApplication.class, args);
}
}
[](()常用功能
[](()启动相关服务
这里我们通过启动eureka-server,两个user-service,feign-service和zuul-proxy来演示Zuul的常用功能,启动后注册中心显示如下。

[](()配置路由规则
我们可以通过修改application.yml中的配置来配置路由规则,这里我们将匹配/userService/**的请求路由到user-service服务上去,匹配/feignService/**的请求路由到feign-service上去。
zuul:
routes:
给服务配置路由
user-service:
path: /userService/**
feign-service:
path: /feignService/**
访问[http://localhost:8801/userService/user/1](()可以发现请求路由到了user-service上了;
访问[http://localhost:8801/feignService/user/1](()可以发现请求路由到了feign-service上了。
[](()默认路由规则
Zuul和Eureka结合使用,可以实现路由的自动配置,自动配置的路由以服务名称为匹配路径,相当于如下配置:
默认路由规则
zuul:
routes:
给服务配置路由
user-service:
path: /user-service/**
feign-service:
path: /feign-service/**
访问[http://localhost:8801/user-service/user/1](()同样可以路由到了user-service上了;
访问[http://localhost:8801/feign-service/user/1](()同样可以路由到了feign-service上了。
如果不想使用默认的路由规则,可以添加以下配置来忽略默认路由配置:
zuul:
#关闭默认路由配置
ignored-services: user-service,feign-service
[](()负载均衡功能
多次调用[http://localhost:8801/user-service/user/1](()进行测试,可以发现运行在8201和8202的user-service服务交替打印如下信息。
2019-12-27 21:31:33.240 INFO 13164 — [nio-8202-exec-1] c.j.s.controller.UserController : 根据id获取用户信息,用户名称为:jourwon
2019-12-27 21:31:43.262 INFO 13164 — [nio-8202-exec-2] c.j.s.controller.UserController : 根据id获取用户信息,用户名称为:jourwon
[](()配置访问前缀
我们可以通过以下配置来给网关路径添加前缀,此处添加了/proxy前缀,这样我们需要访问[http://localhost:8801/proxy/user-service/user/1](()才能访问到user-service中的接口。
zuul:
#给网关路由添加前缀
prefix: /proxy
[](()Header过滤及重定向添加Host
Zuul在请求路由时,默认会过滤掉一些敏感的头信息,以下配置可以防止路由时的Cookie及Authorization的丢失:
zuul:
#配置过滤敏感的请求头信息,设置为空就不会过滤
sensitive-headers: Cookie,Set-Cookie,Authorization
Zuul在请求路由时,不会设置最初的host头信息,以下配置可以解决:
zuul:
#设置为true重定向是会添加host请求头
add-host-header: true
[](()查看路由信息
我们可以通过SpringBoot Actuator来查看Zuul中的路由信息。
在pom.xml中添加相关依赖:
org.springframework.boot
spring-boot-starter-actuator
修改application.yaml配置文件,开启查看路由的端点:
management:
endpoints:
web:
exposure:
include: ‘routes’
通过访问[http://localhost:8801/actuator/routes](()查看简单路由信息:

通过访问[http://localhost:8801/actuator/routes/details](()查看详细路由信息:

[](()过滤器
路由与过滤是Zuul的两大核心功能,路由功能负责将外部请求转发到具体的服务实例上去,是实现统一访问入口的基础,过滤功能负责对请求过程进行额外的处理,是请求校验过滤及服务聚合的基础。
[](()过滤器类型
Zuul中有以下几种典型的过滤器类型。
《一线大厂Java面试真题解析+Java核心总结学习笔记+最新全套讲解视频+实战项目源码》开源
Java优秀开源项目:
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目


Java优秀开源项目:
如何快速更新自己的技术积累?
- 在现有的项目里,深挖技术,比如用到netty可以把相关底层代码和要点都看起来。
- 如果不知道目前的努力方向,就看自己的领导或公司里技术强的人在学什么。
- 知道努力方向后不知道该怎么学,就到处去找相关资料然后练习。
- 学习以后不知道有没有学成,则可以通过面试去检验。
我个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油!
以上面试专题的答小编案整理成面试文档了,文档里有答案详解,以及其他一些大厂面试题目
[外链图片转存中…(img-vySgwTGo-1649569229897)]
[外链图片转存中…(img-h9oWsrjV-1649569229898)]
