本文参考了<Spring Cloud微服务和分布式系统实战>一书, 表示感谢!
具体可关注公众号: 戏说码农职场
首先二者都是服务网管, Zuul是旧的API网关, 后者是新的, 先比较下二者区别:
- Zuul 来自Netflix, 提供身份验证, 安全校验, 限流, 动态路由等, 但是性能一般
- Gateway是在Zuul基础之上创建.
基本定义:
- 网关: 是一种外部网络和内部网络的关卡, 通过网关进行转发, 可以分为硬件网关和软件网关, 硬件网关包括LVS 和F5, 软件网关包括Nginx,Zuul, Gateway等, 主要作用体现在请求过滤和路由转发功能.
简单介绍下使用
Zuul
- 如何使用
增加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
入口方法
@EnableZuulProxy
@EnableDiscoveryClient
@SpringBootApplication
public class ZuulProxyApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulProxyApplication.class, args);
}
}
可以看出Zuul定义为一个服务代理的角色. 继续稍微看下源码:
@EnableCircuitBreaker
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Import(ZuulProxyMarkerConfiguration.class)
public @interface EnableZuulProxy {
}
其中@EnableCircuitBreaker 表面内部是是要断路器Hystrix.
# 定义Spring应用名称,它是一个微服务的名称,一个微服务可拥有多个实例
spring:
application:
name: zuul
# 向端口为5001和5002的Eureka服务治理中心注册
eureka:
client:
serviceUrl:
defaultZone: http://localhost:5001/eureka, http://localhost:5002/eureka
# Zuul的配置
zuul:
# 路由配置
routes:
# 用户微服务
user-service:
# 请求拦截路径配置(使用ANT风格)
path: /u/**
# 通过一个URL配置
url: http://localhost:6001/
# 产品微服务配置
fund-service:
# 请求拦截路径配置(使用ANT风格)
path: /p/**
service-id: product
意味着/u/user/info/1会被映射为localhost:6001/user/info/1
以上是拦截器的功能
2. 限流
依赖springCloud Resilience4j限速器, rateLimiter
那又如何限制呢?
# resilience4j配置
resilience4j:
# 限速器注册机
ratelimiter:
limiters:
# 名称为“user”的限速器
user:
# 时间戳内限制通过的请求数,默认为50
limitForPeriod: 3
# 配置时间戳(单位毫秒),默认值为500 ns
limitRefreshPeriodInMillis: 5000
# 超时时间
timeoutInMillis: 10
3. 动态路由
可以使用MySQL保存服务信息
4. 网关过滤
SpringCloudGateway
特点:
- Spring Cloud Gateway 底层使用了高性能的通信框架Netty 。
2. 三个术语: 过滤, 路由和断言
详细说明转自:
SpringCloud gateway (史上最全)