SpringCloud超详细讲解微服务网关Gateway
作者:_时光煮雨 时间:2021-09-11 14:54:49
前言
上一篇:微服务网关Zuul
上文中,我们介绍了微服务网关Zuul,Zuul 是 Netflix 公司开源的产品,被称为第一代网关,也是 Spring Cloud 前几个版本默认使用的一款提供动态路由微服务网关组件,但是随着 Netflix 公司一系列的停更事件,在最新的 Spring Cloud Greenwich 版本中已经不建议采用 Zuul 技术,官方建议使用 Spring Cloud Gateway 作为默认的网关技术。 Spring Cloud Gateway作为第二代网关技术,比Zull更强,官方会一直维护更新下去。
所以本文需要再介绍一下Gateway。
微服务网关GateWay介绍
Spring Cloud Gateway 是 Spring 体系内的一个全新项目,该项目是基于 Spring 5.0,Spring Boot 2.0 和 Project Reactor 等技术开发,它旨在为微服务架构提供一种简单有效的统一的 API 路由管理方式。
Spring Cloud Gateway 作为 Spring Cloud 生态系统中的网关,目标是替代 Netflix Zuul,其不仅提供统一的路由方式,并且基于 Filter 链的方式提供了网关基本的功能,例如:安全、监控/指标和限流。
GateWay特性介绍
基于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0
动态路由
Predicates 和 Filters 作用于特定路由
集成 Hystrix 断路器
集成 Spring Cloud DiscoveryClient
易于编写的 Predicates 和 Filters
限流
路径重写
Gateway 中的相关术语
Route(路由):这是网关的基本构建块。它由一个 ID,一个目标 URI,一组断言和一组过滤器定义。如果断言为真,则路由匹配。
Predicate(断言):这是一个 Java 8 的 Predicate。输入类型是一个 ServerWebExchange。我们可以使用它来匹配来自 HTTP 请求的任何内容,例如 headers 或参数。
Filter(过滤器):这是
org.springframework.cloud.gateway.filter.GatewayFilter
的实例,我们可以使用它修改请求和响应。
Gateway实战
上文中,我们启动了注册中心registry,dms服务,和app服务,以及zuul服务,本文我们将创建gateway服务以替换zuul:
1、创建项目gateway
创建子模块gateway ,pom.xml引入eureka-client 和gateway 的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、创建启动类
@EnableEurekaClient
@SpringBootApplication
public class GateWayApplication {
public static void main(String[] args) {
SpringApplication.run(GateWayApplication.class, args);
}
}
启动类上增加以及注解。
3、新增配置文件
新增配置文件application.yml
server:
port: 8004
spring:
application:
name: gateway
cloud:
gateway:
discovery:
locator:
enabled: true
lower-case-service-id: true
routes:
- id: eureka-client-app-1
uri: lb://app
predicates:
- Path=/**
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
spring.cloud.gateway.routes路由参数配置说明:
id:我们自定义的路由 ID。
uri:需要转发的目标服务地址。
predicates:路由条件。
filters:过滤规则,本示例暂时没用。
4、编程方式实现路由
上面路由规则我们也可以使用编程方式来实现,在启动类中增加如下代码,是等效的:
@Configuration
public class GatewayConfig {
@Bean
public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
RouteLocatorBuilder.Builder routes = builder.routes();
routes.route("eureka-client-app-1",r -> r.path("/**")
.uri("lb://app"))
.build();
return routes.build();
}
}
5、启动验证
访问Gateway服务的地址:http://localhost:8004/app/index,效果如下:
来源:https://coder965.blog.csdn.net/article/details/125590198
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Java中的接口回调实例
C#中用foreach语句遍历数组及将数组作为参数的用法
Android连接MySQL数据库并进行增删改查操作示例讲解
C#和SQL实现的字符串相似度计算代码分享
SpringBoot2.0解决Long型数据转换成json格式时丢失精度问题
![](https://img.aspxhome.com/file/2023/1/61521_0s.png)
那些年,我还在学习C# 学习笔记
![](https://img.aspxhome.com/file/2023/8/92968_0s.jpg)
C#将Word转换成PDF方法汇总(基于Office和WPS)
java8 stream 如何打印数据元素
Android中ActionBar以及menu的代码设置样式
![](https://img.aspxhome.com/file/2023/2/106032_0s.png)
Spring2.5.6开发环境搭建图文教程
![](https://img.aspxhome.com/file/2023/4/74764_0s.jpg)
Android支付宝支付封装代码
Unity2D实现游戏回旋镖
![](https://img.aspxhome.com/file/2023/8/66118_0s.gif)
spring cloud升级到spring boot 2.x/Finchley.RELEASE遇到的坑
![](https://img.aspxhome.com/file/2023/6/90026_0s.jpg)
IDEA2020.1个性化设置的实现
![](https://img.aspxhome.com/file/2023/5/85505_0s.jpg)
Java使用DualPivotQuicksort排序
如何用C#创建用户自定义异常浅析
Kotlin伴随对象的初始化方法示例讲解
Java中利用gson解析Json实例教程
![](https://img.aspxhome.com/file/2023/1/70511_0s.png)
Flutter数据库的使用方法
Flutter 实现整个App变为灰色的方法示例
![](https://img.aspxhome.com/file/2023/9/128949_0s.jpg)