首页 > 其他分享 >Springboot 整合 SpringCloud组件-Gateway 网关服务 (四)

Springboot 整合 SpringCloud组件-Gateway 网关服务 (四)

时间:2022-11-07 19:38:02浏览次数:43  
标签:网关 Springboot spring SpringCloud gateway Spring Gateway cloud


这篇我将介绍的是网关服务,那么从标题已经知道我们整合的组件时gateway;

也许有人说,为啥不用zuul,这个组件也可以用于做网关。 至于这两组件的性能比较与区别,我们来看一个表格简单了解下:

Gateway与Zuul

 

gateway

zuul

基本介绍

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代Netflix ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

 

Zuul1 是基于 Servlet 框架构建,如图所示,采用的是阻塞和多线程方式,即一个线程处理一次连接请求,这种方式在内部延迟严重、设备故障较多情况下会引起存活的连接增多和线程增加的情况发生。

性能

WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。Spring webflux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现非常好。使用非阻塞API。 Websockets得到支持,并且由于它与Spring紧密集成,所以将会是一个更好的 开发 体验。 

本文的Zuul,指的是Zuul 1.x,是一个基于阻塞io的API Gateway。Zuul已经发布了Zuul 2.x,基于Netty,也是非阻塞的,支持长连接,但Spring Cloud暂时还没有整合计划。

源码维护组织

​spring-cloud-Gateway​​​是spring旗下​​spring-cloud​​​的一个子项目。还有一种说法是因为​​zuul2​​​连续跳票和​​zuul1​​​的性能表现不是很理想,所以催生了spring孵化​​Gateway​​项目。

​zuul​​​则是​​netflix​​​公司的项目,只是spring将​​zuul​​集成在spring-cloud中使用而已。关键目前spring不打算集成zuul2.x。

版本

springboot2.0

springboot1.x

接下来我们开始整合gateway,实现该组件的基础使用:

创建一个springboot项目,起名 gateway:

Springboot 整合 SpringCloud组件-Gateway  网关服务  (四)_springcloud

(同样,我们这里选用的springcloud版本是:Finchley.RELEASE) 

pom.xml里核心的依赖包为:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

实现基础功能使用,我们可以直接在application.yml进行配置:

server:
port: 8081

spring:
application:
name: test-gateway-service
cloud:
gateway:
discovery:
locator:
enabled: false
#开启小写验证,默认feign根据服务名查找都是用的全大写
lowerCaseServiceId: true
routes:
- id: client-test
uri: lb://CLIENT-TEST
predicates:
- Path=/testclient/**
filters:
- StripPrefix=1
- id: service-feign
uri: lb://FEIGN
predicates:
- Path=/service-feign/**
filters:
- StripPrefix=1
eureka:
instance:
preferIpAddress: true
instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
service-url:
defaultZone: http://localhost:8761/eureka/

启动类也同样加上 @EnableEurekaClient。

 

可以看到我们简单配置了2个路由:

路由id为client-test的,

只要是访问路径带有 /testclient的, 都会根据从Eureka注册中心获取的服务信息去寻找储服务名为CLIENT-TEST的服务实例,进行接口转发调用。

路由id为service-feign的,

同理,只要是访问路径带有 /service-feign的, 都会根据从Eureka注册中心获取的服务信息去寻找储服务名为FEIGN的服务实例,进行接口转发调用。

 

那么我们先把网关gateway服务跑起来,逐一调用接口看看:

Springboot 整合 SpringCloud组件-Gateway  网关服务  (四)_spring_02

 访问:​​http://localhost:8081/testclient/haveatry?name=JCccc​​

Springboot 整合 SpringCloud组件-Gateway  网关服务  (四)_springcloud_03

访问: ​​http://localhost:8081/service-feign/feignTest?name=TestMessage​​

Springboot 整合 SpringCloud组件-Gateway  网关服务  (四)_springcloud_04

可以看到通过网关访问,路由转发都是OK的。 

标签:网关,Springboot,spring,SpringCloud,gateway,Spring,Gateway,cloud
From: https://blog.51cto.com/u_15753094/5831054

相关文章