微服务网关 Spring Cloud Gateway

编程入门 行业动态 更新时间:2024-10-06 12:26:47

微服务<a href=https://www.elefans.com/category/jswz/34/1769301.html style=网关 Spring Cloud Gateway"/>

微服务网关 Spring Cloud Gateway

API网关的作用

最重要的作用

  • 转发
  • 验签

当然还有限流,熔断、日志、统一鉴权、统一错误处理等等

还可以统一认证鉴权、灰度发布(A/B Test,即一部分用户继续使用 A 功能,另一小部分使用新的 B 功能)

网关的本质及技术选型

网关的本质应该是对请求进行路由转发,以及对请求进行前置和后置的过滤

OpenResty

对于每一个请求,Openresty 会把请求分为不同阶段,从而可以让第三方模块通过挂载行为来实现不同阶段的自定义行为

Spring Cloud Zuul

Zuul网关的核心是一系列的过滤器,这些过滤器可以对请求或者响应结果做一系列过滤,Zuul 提供了一个框架可以支持动态加载,编译,运行这些过滤器,这些过滤器是使用责任链方式顺序对请求或者响应结果进行处理的,这些过滤器直接不会直接进行通信,但是通过责任链传递的RequestContext参数可以共享一些东西

Spring Cloud Gateway 网关实战

准备 gateway-server 网关中心

准备 bullet-user-rest 用户中心

1、添加依赖,网关、nacos

在gateway的pom添加

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>

在网关中心那里添加 添加 bootstrap.yaml

spring:application:name: gateway-server${GATEWAY-TYPE:}cloud:nacos:discovery:server-addr: ${DISCOVERY_ADDRESS:dev.test}:8848namespace: ${DISCOVERY_NAMESPACE:dev}config:file-extension: ymlshared-dataids: infinite-common.ymlrouter-dataids: infinite-dynamic-routes${GATEWAY-TYPE:}.ymlrefreshable-dataids: ${spring.cloud.nacos.config.shared-dataids},${spring.application.name}.yml,${spring.cloud.nacos.config.router-dataids}server-addr: ${DISCOVERY_ADDRESS:dev.yunhuotong}:8848namespace: ${DISCOVERY_NAMESPACE:dev}gateway:discovery:locator:enabled: falsehttpclient:connect-timeout: ${cn.bilibili.gateway.httpclient.connectTimeout}response-timeout: ${cn.bilibili.gateway.httpclient.responseTimeout}
# server
server:port: 8000

2、nacos 配置文件

gateway.yml文件添加配置

# tomcat配置
cn:bilibili:tomcat:acceptorThreadCount: 2maxThreads: 300maxConnections: 5000aps:version: v100000002gateway:httpclient:connectTimeout: 5000responseTimeout: PT120Sapi:req:verify:isOpen: 1encipherFlag: truetoken:isOpen: 1isPass: 0jwtSecret: JYJ5Qv2WF4lA6jPl5GKuAGwhiteApiList:- "/bullet-order-rest/refund/launch"- "/bullet-order-rest/order/switch/getSixRestructureSwitch"- "/bullet-order-rest/order/getOrderInfoById"permission:guys:- appId: defaultkey: UER9oXBfDvdIm7G6Gz9O# H5使用- appId: '00000001'key: 76821d9ab9ade527b2c0dba02f5566e4# 预留第三方使用- appId: '00000101'key: dfe4e2cecab3d8b642900779b05f0795whiteApiList:- /bullet-live-rest/live-plan/goods-group-list/*- /bullet-goods-rest/goodsHome/*# app-c- appId: '00000102'key: d5e6c63ebdf4f65bf8381dcc4f10202d# app-b- appId: '00000103'key: fa5fa748121d188c8efdce85252d3f57noallow:methodGetApiList:- /bullet-user-rest/user/organization/getByOrgId/?- /bullet-user-rest/user/getUserByUserId/?- /bullet-user-rest/user/group/getById- /bullet-user-rest/user/group/getByGroupId/?- /bullet-user-rest/user/group/getByIdNoCacheredisson:#host: r-xxxxxxxx.redis.rds.aliyuncs:6379#password: 123456host: localhost:6379password: 123456timeout: 1000connectionPoolSize: 20connectionMinimumIdleSize: 10connectTimeout: 1000logging:level:cn.bilibili.gateway.server.util.SignUtil: WARN# spring:
#   security:
#     user:
#       name: test
#       password: test@2020
##sentinel
nacos:address: nacos-headless.middlewaredegradeRulesDataId: gateway-degrade-rulesflowRulesDataId: gateway-flow-rulesgroupId: SENTINEL_GROUPtokenServerDataId: yhtplus-token-servers
sentinel:dashboardURL: sentinel-dashboard.middleware:8080enabled: trueproject:name: gateway

infinite-dynamic-routes.yml

routes:
# base-auth
- id: bullet-user-restpredicates:- Path=/bullet-user-rest/**uri: lb://bullet-user-restfilters:- StripPrefix=1

Spring Cloud Gateway 原理分析

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

Spring Cloud Gateway 的核心处理流程如下图,Gateway的客户端回向Spring Cloud Gateway发起请求,请求首先会被HttpWebHandlerAdapter进行提取组装成网关的上下文,然后网关的上下文会传递到DispatcherHandler。DispatcherHandler是所有请求的分发处理器,DispatcherHandler主要负责分发请求对应的处理器,比如将请求分发到对应RoutePredicateHandlerMapping(路由断言处理器映射器)。路由断言处理映射器主要用于路由的查找,以及找到路由后返回对应的FilteringWebHandler。FilteringWebHandler主要负责组装Filter链表并调用Filter执行一系列Filter处理,然后把请求转到后端对应的代理服务处理,处理完毕后,将Response返回到Gateway客户端。

在Filter链中,通过虚线分割Filter的原因是,过滤器可以在转发请求之前处理或者接收到被代理服务的返回结果之后处理。所有的Pre类型的Filter执行完毕之后,才会转发请求到被代理的服务处理。被代理的服务把所有请求完毕之后,才会执行Post类型的过滤器。



 

更多推荐

微服务网关 Spring Cloud Gateway

本文发布于:2024-02-06 02:15:01,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1745947.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:网关   Spring   Gateway   Cloud

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!