Gateway 网关服务

简介: Gateway 网关服务

为什么需要网关

网关功能:

  • 对用户请求做身份认证、权限校验
  • 将用户请求路由到微服务,并实现负载均衡
  • 对用户请求做限流

网关的技术实现

SpringCloud中网关的实现包括两种:

  • gateway
  • zuul
  • Zuul是基于Servlet的实现,属于阻塞式编程。而SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能

搭建网关服务

1、创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖:

<!--网关依赖-->
<dependency>   
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--nacos服务发现依赖-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> 
</dependency>

2、编写路由配置及nacos地址

server:

 port: 10010 # 网关端口

spring:

application:

   name: gateway # 服务名称

 cloud:

   nacos:

     server-addr: localhost:8848 # nacos地址

   gateway:

     routes: # 网关路由配置

       - id: user-service # 路由id,自定义,只要唯一即可

         # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址

         uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称

         predicates: # 路由断言,也就是判断请求是否符合路由规则的条件

           - Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求

网关是个独立的服务,因此需要配置一个端口然后要配置


配置nacos,实现服务的注册和发现


允许有多个路由配置routes,每个路由配置只能有一个路由id


uri是路由的目的地址,可以直接写死目的地址,如 uri: http://127.0.0.1:8081,但是一般不这么使用


一般使用 uri: lb://userservice 这里的 userservice 是注册在服务注册中心的服务,因此上面需要配置nacos


那我们要将哪些请求转发到 userservice服务呢?这个就需要我们配置路由断言,路由断言判断哪些请求需要进行转发,我们这边只进行了Path断言条件,实际上还有很多,我额外写了一篇博客,大家可以参考

网关原理

当我们要访问一个具体服务时,不再访问其端口,而是访问网关服务的端口,网关就会将我们的请求再转发给对应的具体服务,如下

而网关具体就通过注册中心进行远程调用,如下

过滤器

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理

其作用时机如下

相关实践学习
部署高可用架构
本场景主要介绍如何使用云服务器ECS、负载均衡SLB、云数据库RDS和数据传输服务产品来部署多可用区高可用架构。
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
20天前
|
算法 NoSQL API
SpringCloud&Gateway网关限流
SpringCloud&Gateway网关限流
63 7
|
20天前
|
缓存
SpringCloud Gateway 网关的请求体body的读取和修改
SpringCloud Gateway 框架中,为了处理请求体body,实现多次读取与修改,创建了一个名为`RequestParamGlobalFilter`的全局过滤器。这个过滤器使用`@Component`和`@Slf4j`注解,实现了`GlobalFilter`和`Ordered`接口,设置最高优先级以首先读取body。它通过缓存请求体并创建装饰过的`ServerHttpRequest`来实现body的动态获取。
114 4
|
20天前
|
负载均衡 应用服务中间件 API
Nginx、Kong、Apisix、Gateway网关比较
Nginx、Kong、Apisix、Gateway网关比较
213 1
Nginx、Kong、Apisix、Gateway网关比较
|
20天前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
144 0
|
12天前
|
运维 负载均衡 API
API服务网关的作用
【5月更文挑战第23天】API服务网关是微服务架构中的统一入口,负责请求路由、组合及协议转换,隐藏内部架构细节。
|
13天前
|
设计模式 缓存 Java
【设计模式】JAVA Design Patterns——API Gateway(API网关模式)
【设计模式】JAVA Design Patterns——API Gateway(API网关模式)
|
20天前
|
SpringCloudAlibaba 负载均衡 Java
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
【微服务 SpringCloudAlibaba】实用篇 · Gateway服务网关
39 0
|
20天前
|
负载均衡 Java API
构建高效微服务架构:API网关与服务熔断策略
【5月更文挑战第2天】 在微服务架构中,确保系统的高可用性与灵活性是至关重要的。本文将深入探讨如何通过实施有效的API网关和设计合理的服务熔断机制来提升分布式系统的鲁棒性。我们将分析API网关的核心职责,包括请求路由、负载均衡、认证授权以及限流控制,并讨论如何利用熔断器模式防止故障传播,维护系统的整体稳定性。文章还将介绍一些实用的技术和工具,如Netflix Zuul、Spring Cloud Gateway以及Hystrix,以帮助开发者构建一个可靠且高效的微服务环境。
|
20天前
|
前端开发 Java 应用服务中间件
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
Springboot解决跨域问题方案总结(包括Nginx,Gateway网关等)
|
20天前
|
Java Maven 微服务
使用Spring Cloud Gateway构建微服务网关
以上简要示例介绍了使用Spring Cloud Gateway构建微服务网关的基本步骤,包括添加依赖、配置路由、编写过滤器等。通过配置和自定义过滤器,可以实现请求转发、过滤、鉴权等功能。
54 5