SpringCloud Zuul工作原理及快速使用
2021-06-30 本文已影响0人
综合楼
背景
不同的微服务一般会有不同的网络地址,而客户端可能需要调用多个服务接口才能完成一个业务需求。
若让客户端直接与各个微服务通信,会有以下问题:
- 客户端会多次请求不同微服务,增加了客户端复杂性。
- 存在跨域请求,处理相对复杂。
- 认证复杂,每个服务都需要独立认证。
-
难以重构,多个服务可能将会合并成一个或拆分成多个。
image.png
简介
- Zuul是spring cloud中的微服务网关。网关: 是一个网络整体系统中的前置门户入口。请求首先通过网关,进行路径的路由,定位到具体的服务节点上。
- Zuul是一个微服务网关,首先是一个微服务。也是会在Eureka注册中心中进行服务的注册和发现。也是一个网关,请求应该通过Zuul来进行路由。
- Zuul网关不是必要的。是推荐使用的。
- 使用Zuul,一般在微服务数量较多(多于10个)的时候推荐使用,对服务的管理有严格要求的时候推荐使用,当微服务权限要求严格的时候推荐使用。
Zuul网关的作用
image.png网关有以下几个作用:
- 统一入口:未全部为服务提供一个唯一的入口,网关起到外部和内部隔离的作用,保障了后台服务的安全性。
- 鉴权校验:识别每个请求的权限,拒绝不符合要求的请求。
- 动态路由:动态的将请求路由到不同的后端集群中。
-
减少客户端与服务端的耦合:服务可以独立发展,通过网关层来做映射。
image.png
快速使用
代码集成了eureka,config,不清楚可以先看前两篇文章。
image.pngbootstrap.yml(zuul)
spring:
application:
name: zuul
cloud:
config:
name: zuul, common-eureka
uri: http://config-server:8800
fail-fast: true
profile: dev
common-eureka-dev.yml
eureka:
client: #客户端注册进eureka服务列表内
service-url:
defaultZone: http://eureka-server:8801/eureka
zuul-dev.yml
server:
port: 8803
context-path: /
eureka:
instance:
instance-id: zuul
spring:
application:
name: zuul
http:
multipart:
max-file-size: 10MB
max-request-size: 10MB
enabled: true
zuul:
servlet-path: /zuul
host:
socket-timeout-millis: 60000
connect-timeout-millis: 60000
time-unit: milliseconds
# prefix: /api # 添加路由前缀
routes:
demo:
path: /demo/**
serviceId: demo
#全局参数 覆盖过滤敏感头 可以用Cookie
sensitive-headers:
pom.xml
<!-- zuul begin -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>
<!-- zuul end -->
BasisZuulApplication
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@EnableEurekaClient
@EnableDiscoveryClient
//开启路由功能
@EnableZuulProxy
@SpringBootApplication
public class BasisZuulApplication {
public static void main(String[] args) { SpringApplication.run(BasisZuulApplication.class, args); }
}
demo服务与上篇SpringCloud config文中的一样
image.png启动服务
image.png访问地址:http://localhost:8803/zuul/demo/test/hello
image.png上篇config介绍中的demo服务是没有经过网关直接访问的
image.png这次是经过网关访问的