java 网关 框架_SpringCloud组件之网关Spring Cloud Gateway(Hoxton版本)

  • Post author:
  • Post category:java


1.Spring Cloud Gateway简介

Spring Cloud Gateway 为 SpringBoot 应用提供了API网关支持,具有强大的智能路由与过滤器功能,本文将对其用法进行详细介绍。

Spring Cloud Gateway是SpringCloud新推出的网关框架,比较于上一代Zuul,功能和性能有很大的提升。Zuul1.x采用的是阻塞多线程方式,也就是一个线程处理一个连接请求,高并发情况下性能较差,即使是Zuul2.x虽然做到了非阻塞,但是面对连续跳票,看起来Zuul要被抛弃了。取而代之的是Spring Cloud Gateway,Spring Cloud Gateway是基于Webflux,是一个非阻塞异步的框架,性能上有很大提升,而且包含了Zuul的所有功能,可以从Zuul无缝切换到Spring Cloud Gateway。

Spring Cloud Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project Reactor等技术。Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能, 例如:熔断、限流、重试等。
015a0d24e5321ff88b34de4dd3fa561d.png

官网Gateway的工作原理图如下:

28d939fa6ca3e391ae4bc51b54f758ce.png

1.1 相关特性

Spring Cloud Gateway 具有如下特性:

基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 进行构建;

动态路由:能够匹配任何请求属性;

可以对路由指定 Predicate(断言)和 Filter(过滤器);

集成Hystrix的断路器功能;

集成 Spring Cloud 服务发现功能;

易于编写的 Predicate(断言)和 Filter(过滤器);

请求限流功能;

支持路径重写。

1.2 相关概念

Route(路由):路由是构建网关的基本模块,它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由;

Predicate(断言):指的是Java 8 的 Function Predicate。 输入类型是Spring框架中的ServerWebExchange。 这使开发人员可以匹配HTTP请求中的所有内容,例如请求头或请求参数。如果请求与断言相匹配,则进行路由;

Filter(过滤器):指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前后对请求进行修改。

2.创建Spring Cloud Gateway工程

2.1在pom中添加相关依赖

xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

spring-cloud-demo

com.hxmec

1.0-SNAPSHOT

4.0.0

spring-cloud-gateway

org.springframework.cloud

spring-cloud-starter-gateway

org.springframework.boot

spring-boot-starter-test

test

org.springframework.cloud

spring-cloud-starter-netflix-eureka-client

org.springframework.cloud

spring-cloud-starter-netflix-hystrix

org.springframework.boot

spring-boot-starter-actuator

org.springframework.boot

spring-boot-maven-plugin

复制代码

创建启动类GateWayApplication,启动类代码如下:

@SpringBootApplication

@EnableDiscoveryClient

public class GateWayApplication {

public static void main(String[] args) {

SpringApplication.run(GateWayApplication.class, args);

}

}

复制代码

2.2 spring cloud gateway路由配置有两种方法

配置文件方式

Java Bean方式

2.2.1配置文件方式

增加配置文件bootstrap.yml,内容如下:

server:

port: 9100

eureka:

instance:

#每隔5s发送一次心跳

lease-renewal-interval-in-seconds: 5

#告知服务端10秒还未收到心跳的话,就将该服务移除列表

lease-expiration-duration-in-seconds: 10

#健康检查路径

health-check-url-path: /actuator/health

client:

#默认为30秒

registry-fetch-interval-seconds: 5

serviceUrl:

#eureka注册中心地址

defaultZone: http://localhost:8888/eureka/

spring:

application:

name: api-gateway

cloud:

gateway:

discovery:

locator:

#开启从注册中心动态创建路由的功能

enabled: true

#使用小写服务名,默认是大写

lower-case-service-id: true

routes:

– id: eureka-client-provider #路由的ID

uri: lb://eureka-client-provider

predicates:

– Path=/provider/** # 路由规则

filters:

– StripPrefix=1

– id: eureka-client-consumer #路由的ID

uri: lb://eureka-client-consumer

predicates:

– Path=/consumer/** # 路由规则

filters:

– StripPrefix=1

复制代码

2.2.2 JAVA BEAN配置如下

增加一个JAVA类GatewayConfig,用于配置路由

@Configuration

public class GatewayConfig {

@Bean

public RouteLocator customerRouteLocator(RouteLocatorBuilder builder) {

return builder.routes ()

.route (r -> r.path (“/provider/**”)

.filters (f -> f.stripPrefix (1))

.uri (“lb://eureka-client-provider”)

.id (“eureka-client-provider”)

)

.route (r -> r.path (“/consumer/**”)

.filters (f -> f.stripPrefix (1))

.uri (“lb://eureka-client-consumer”)

.id (“eureka-client-consumer”)

)

.build ();

}

}

复制代码

2.3启动程序,进行路由测试

启动此前文中的spring-cloud-eureka-server,spring-cloud-eureka-client-provider,spring-cloud-eureka-client-consumer,以及本文总创建的spring-cloud-gateway工程。

测试地址如下:

http://localhost:9100/provider/demo/hello

http://localhost:9100/consumer/test/callHello

c306923fdcb524e0ba4ef1db3dd76fee.png

6a3d758c145c83577a4f7cec1c23409a.png

通过请求地址我们可以发现,请求已经路由到对应的服务中。

3.项目git地址

GitHub github.com/ty197287300…

4.参考

【官方文档】cloud.spring.io/spring-clou…

b739ec46bb5c46d9c0aa4ce35ba1ea56.png

关于找一找教程网

本站文章仅代表作者观点,不代表本站立场,所有文章非营利性免费分享。

本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章,希望广大程序员努力学习,让我们用科技改变世界。

[SpringCloud组件之网关Spring Cloud Gateway(Hoxton版本)]http://www.zyiz.net/tech/detail-142223.html



版权声明:本文为weixin_39543835原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。