微服务网关Zuul迁移到Spring Cloud Gateway

springcloud zuul gateway 服务网关 springcloud zuul gateway 服务网关 http://knight-black-bob.iteye.com/blog/2357683 立即下载

本文将会介绍将微服务网关由Zuul迁移到Spring Cloud Gateway。

Spring Cloud Netflix Zuul是由Netflix开源的API网关,在微服务架构下,网关作为对外的门户,实现动态路由、监控、授权、安全、调度等功能。

Zuul基于servlet 2.5(使用3.x),使用阻塞API。 它不支持任何长连接,如websockets。而Gateway建立在Spring Framework 5,Project Reactor和Spring Boot 2之上,使用非阻塞API。 比较完美地支持异步非阻塞编程,先前的Spring系大多是同步阻塞的编程模式,使用thread-per-request处理模型。即使在Spring MVC Controller方法上加@Async注解或返回DeferredResult、Callable类型的结果,其实仍只是把方法的同步调用封装成执行任务放到线程池的任务队列中,还是thread-per-request模型。Gateway 中Websockets得到支持,并且由于它与Spring紧密集成,所以将会是一个更好的开发体验。

在一个微服务集成的项目中microservice-integration,我们整合了包括网关、auth权限服务和backend服务。提供了一套微服务架构下,网关服务路由、鉴权和授权认证的项目案例。整个项目的架构图如下:

13467292-a33866d2cc9e5faf

具体参见:微服务架构中整合网关、权限服务。本文将以该项目中的Zuul网关升级作为示例。

Zuul网关

在该项目中,Zuul网关的主要功能为路由转发、鉴权授权和安全访问等功能。

Zuul中,很容易配置动态路由转发,如:

zuul: ribbon: eager-load: enabled:true#zuul饥饿加载 host: maxTotalConnections:200 maxPerRouteConnections:20 routes: user: path:/user/** ignoredPatterns:/consul serviceId:user sensitiveHeaders:Cookie,Set-Cookie

默认情况下,Zuul在请求路由时,会过滤HTTP请求头信息中的一些敏感信息,这里我们不过多介绍。

网关中还配置了请求的鉴权,结合Auth服务,通过Zuul自带的Pre过滤器可以实现该功能。当然还可以利用Post过滤器对请求结果进行适配和修改等操作。

除此之外,还可以配置限流过滤器和断路器,下文中将会增加实现这部分功能。

迁移到Spring Cloud Gateway

笔者新建了一个gateway-enhanced的项目,因为变化很大,不适合在之前的gateway项目基础上修改。实现的主要功能如下:路由转发、权重路由、断路器、限流、鉴权和黑白名单等。本文基于主要实现如下的三方面功能:

路由断言

过滤器(包括全局过滤器,如断路器、限流等)

全局鉴权

路由配置

CORS

依赖

本文采用的Spring Cloud Gateway版本为2.0.0.RELEASE。增加的主要依赖如下,具体的细节可以参见Github上的项目。

org.springframework.cloudspring-cloud-starter-gateway<!--<version>2.0.1.RELEASE</version>-->org.springframework.cloudspring-cloud-gateway-webfluxorg.springframework.cloudspring-cloud-dependenciesFinchley.RELEASEpomimport

路由断言

Spring Cloud Gateway对于路由断言、过滤器和路由的定义,同时支持配置文件的shortcut和Fluent API。我们将以在本项目中实际使用的功能进行讲解。

路由断言在网关进行转发请求之前进行判断路由的具体服务,通常可以根据请求的路径、请求体、请求方式(GET/POST)、请求地址、请求时间、请求的HOST等信息。我们主要用到的是基于请求路径的方式,如下:

spring: cloud: gateway: routes:- id: service_to_web uri:lb://authdemo predicates:- Path=/demo/**

我们定义了一个名为service_to_web的路由,将请求路径以/demo/**的请求都转发到authdemo服务实例。

我们在本项目中路由断言的需求并不复杂,下面介绍通过Fluent API配置的其他路由断言:

@Beanpublic RouteLocator routeLocator(RouteLocatorBuilder builder) {returnbuilder.routes() .route(r -> r.host("**.changeuri.org").and().header("X-Next-Url") .uri("http://blueskykong.com")) .route(r -> r.host("**.changeuri.org").and().query("url") .uri("http://blueskykong.com")) .build(); }

在如上的路由定义中,我们配置了以及请求HOST、请求头部和请求的参数。在一个路由定义中,可以配置多个断言,采取与或非的关系判断。

以上增加的配置仅作为扩展,读者可以根据自己的需要进行配置相应的断言。

过滤器

过滤器分为全局过滤器和局部过滤器。我们通过实现GlobalFilter、GatewayFilter接口,自定义过滤器。

全局过滤器

本项目中,我们配置了如下的全局过滤器:

基于令牌桶的限流过滤器

基于漏桶算法的限流过滤器

全局断路器

全局鉴权过滤器

定义全局过滤器,可以通过在配置文件中,增加spring.cloud.gateway.default-filters,或者实现GlobalFilter接口。

基于令牌桶的限流过滤器

随着时间流逝,系统会按恒定 1/QPS 时间间隔(如果 QPS=100,则间隔是 10ms)往桶里加入 Token,如果桶已经满了就不再加了。每个请求来临时,会拿走一个 Token,如果没有 Token 可拿了,就阻塞或者拒绝服务。

令牌桶的另外一个好处是可以方便的改变速度。一旦需要提高速率,则按需提高放入桶中的令牌的速率。一般会定时(比如 100 毫秒)往桶中增加一定数量的令牌,有些变种算法则实时的计算应该增加的令牌的数量。

在Spring Cloud Gateway中提供了默认的实现,我们需要引入redis的依赖:

org.springframework.bootspring-boot-starter-data-redis-reactive

并进行如下的配置:

spring:redis:host: localhostpassword: pwdport:6378cloud:default-filters: -name: RequestRateLimiterargs:key-resolver:"#{@remoteAddrKeyResolver}"rate-limiter:"#{@customRateLimiter}"# token

注意到,在配置中使用了两个SpEL表达式,分别定义限流键和限流的配置。因此,我们需要在实现中增加如下的配置:

@Bean(name ="customRateLimiter")publicRedisRateLimitermyRateLimiter(GatewayLimitProperties gatewayLimitProperties){ GatewayLimitProperties.RedisRate redisRate = gatewayLimitProperties.getRedisRate();if(Objects.isNull(redisRate)) {thrownewServerException(ErrorCodes.PROPERTY_NOT_INITIAL); }returnnewRedisRateLimiter(redisRate.getReplenishRate(), redisRate.getBurstCapacity()); }@Bean(name = RemoteAddrKeyResolver.BEAN_NAME)publicRemoteAddrKeyResolverremoteAddrKeyResolver(){returnnewRemoteAddrKeyResolver(); }

在如上的实现中,初始化好RedisRateLimiter和RemoteAddrKeyResolver两个Bean实例,RedisRateLimiter是定义在Gateway中的redis限流属性;而RemoteAddrKeyResolver使我们自定义的,基于请求的地址作为限流键。如下为该限流键的定义:

publicclassRemoteAddrKeyResolverimplementsKeyResolver{privatestaticfinalLogger LOGGER = LoggerFactory.getLogger(RemoteAddrKeyResolver.class);publicstaticfinalString BEAN_NAME ="remoteAddrKeyResolver";@OverridepublicMono resolve(ServerWebExchange exchange) { LOGGER.debug("token limit for ip: {} ", exchange.getRequest().getRemoteAddress().getAddress().getHostAddress());returnMono.just(exchange.getRequest().getRemoteAddress().getAddress().getHostAddress()); }}

RemoteAddrKeyResolver实现了KeyResolver接口,覆写其中定义的接口,返回值为请求中的地址。

如上,即实现了基于令牌桶算法的链路过滤器,具体细节不再展开。

基于漏桶算法的限流过滤器

漏桶(Leaky Bucket)算法思路很简单,水(请求)先进入到漏桶里,漏桶以一定的速度出水(接口有响应速率),当水流入速度过大会直接溢出(访问频率超过接口响应速率),然后就拒绝请求,可以看出漏桶算法能强行限制数据的传输速率。

这部分实现读者参见GitHub项目以及文末配套的书,此处略过。

全局断路器

关于Hystrix断路器,是一种服务容错的保护措施。断路器本身是一种开关装置,用于在电路上保护线路过载,当线路中有发生短路状况时,断路器能够及时的切断故障电路,防止发生过载、起火等情况。

微服务架构中,断路器模式的作用也是类似的,当某个服务单元发生故障之后,通过断路器的故障监控,直接切断原来的主逻辑调用。关于断路器的更多资料和Hystrix实现原理,读者可以参考文末配套的书。

这里需要引入spring-cloud-starter-netflix-hystrix依赖:

org.springframework.cloudspring-cloud-starter-netflix-hystrixtrue

并增加如下的配置:

default-filters: -name: Hystrixargs:name: fallbackcmdfallbackUri:forward:/fallbackcontroller

如上的配置,将会使用HystrixCommand打包剩余的过滤器,并命名为fallbackcmd,我们还配置了可选的参数fallbackUri,降级逻辑被调用,请求将会被转发到URI为/fallbackcontroller的控制器处理。定义降级处理如下:

@RequestMapping(value ="/fallbackcontroller")publicMap fallBackController() { Map res =newHashMap(); res.put("code","-100"); res.put("data","service not available");returnres; }

全局鉴权过滤器

我们通过自定义一个全局过滤器实现,对请求合法性的鉴权。具体功能不再赘述了,通过实现GlobalFilter接口,区别的是Webflux传入的是ServerWebExchange,通过判断是不是外部接口(外部接口不需要登录鉴权),执行之前实现的处理逻辑。

publicclass AuthorizationFilter implements GlobalFilter, Ordered {//....@OverridepublicMonofilter(ServerWebExchange exchange, GatewayFilterChain chain) { ServerHttpRequest request = exchange.getRequest();if(predicate(exchange)) { request = headerEnhanceFilter.doFilter(request);StringaccessToken = extractHeaderToken(request); customRemoteTokenServices.loadAuthentication(accessToken); LOGGER.info("success auth token and permission!"); }returnchain.filter(exchange); }//提出头部的tokenprotectedStringextractHeaderToken(ServerHttpRequest request) { List headers = request.getHeaders().get("Authorization");if(Objects.nonNull(headers) && headers.size() >0) {// typically there is only one (most servers enforce that)Stringvalue = headers.get(0);if((value.toLowerCase().startsWith(OAuth2AccessToken.BEARER_TYPE.toLowerCase()))) {StringauthHeaderValue = value.substring(OAuth2AccessToken.BEARER_TYPE.length()).trim();// Add this here for the auth details later. Would be better to change the signature of this method.intcommaIndex = authHeaderValue.indexOf(',');if(commaIndex >0) { authHeaderValue = authHeaderValue.substring(0, commaIndex); }returnauthHeaderValue; } }returnnull; }}

定义好全局过滤器之后,只需要配置一下即可:

@BeanpublicAuthorizationFilterauthorizationFilter(CustomRemoteTokenServices customRemoteTokenServices,

HeaderEnhanceFilter headerEnhanceFilter,

PermitAllUrlProperties permitAllUrlProperties){returnnewAuthorizationFilter(customRemoteTokenServices, headerEnhanceFilter, permitAllUrlProperties); }

局部过滤器

我们常用的局部过滤器有增减请求和相应头部、增减请求的路径等多种过滤器。我们这里用到的是去除请求的指定前缀,这部分前缀只是用户网关进行路由判断,在转发到具体服务时,需要去除前缀:

-id:service_to_useruri: lb://user order: 8000 predicates: -Path=/user/**filters: - AddRequestHeader=X-Request-Foo, Bar-StripPrefix=1

还可以通过Fluent API,如下:

@Beanpublic RouteLocator retryRouteLocator(RouteLocatorBuilder builder) {returnbuilder.routes() .route("retry_java", r -> r.path("/test/**") .filters(f -> f.stripPrefix(1) .retry(config -> config.setRetries(2).setStatuses(HttpStatus.INTERNAL_SERVER_ERROR))) .uri("lb://user")) .build(); }

除了设置前缀过滤器外,我们还设置了重试过滤器,可以参见:Spring Cloud Gateway中的过滤器工厂:重试过滤器

路由配置

路由定义在上面的示例中已经有列出,可以通过配置文件和定义RouteLocator的对象。这里需要注意的是,配置中的uri属性,可以是具体的服务地址(IP+端口号),也可以是通过服务发现加上负载均衡定义的:lb://user,表示转发到user的服务实例。当然这需要我们进行一些配置。

引入服务发现的依赖:

org.springframework.cloudspring-cloud-starter-consul-discovery

网关中开启spring.cloud.gateway.discovery.locator.enabled=true即可。

CORS配置

在Spring 5 Webflux中,配置CORS,可以通过自定义WebFilter实现:

privatestaticfinalStringALLOWED_HEADERS ="x-requested-with, authorization, Content-Type, Authorization, credential, X-XSRF-TOKEN";privatestaticfinalStringALLOWED_METHODS ="GET, PUT, POST, DELETE, OPTIONS";privatestaticfinalStringALLOWED_ORIGIN ="*";privatestaticfinalStringMAX_AGE ="3600"; @BeanpublicWebFilter corsFilter() {return(ServerWebExchange ctx, WebFilterChain chain) -> { ServerHttpRequest request = ctx.getRequest();if(CorsUtils.isCorsRequest(request)) { ServerHttpResponse response = ctx.getResponse(); HttpHeaders headers = response.getHeaders(); headers.add("Access-Control-Allow-Origin", ALLOWED_ORIGIN); headers.add("Access-Control-Allow-Methods", ALLOWED_METHODS); headers.add("Access-Control-Max-Age", MAX_AGE); headers.add("Access-Control-Allow-Headers",ALLOWED_HEADERS);if(request.getMethod() == HttpMethod.OPTIONS) { response.setStatusCode(HttpStatus.OK);returnMono.empty(); } }returnchain.filter(ctx); }; }

上述代码实现比较简单,读者根据实际的需要配置ALLOWED_ORIGIN等参数。

总结

在高并发和潜在的高延迟场景下,网关要实现高性能高吞吐量的一个基本要求是全链路异步,不要阻塞线程。Zuul网关采用同步阻塞模式不符合要求。

Spring Cloud Gateway基于Webflux,比较完美地支持异步非阻塞编程,很多功能实现起来比较方便。Spring5必须使用java 8,函数式编程就是java8重要的特点之一,而WebFlux支持函数式编程来定义路由端点处理请求。

通过如上的实现,我们将网关从Zuul迁移到了Spring Cloud Gateway。在Gateway中定义了丰富的路由断言和过滤器,通过配置文件或者Fluent API可以直接调用和使用,非常方便。在性能上,也是胜于之前的Zuul网关。

加群即可获取Java工程化、高性能及分布式、高性能、高架构。性能调优、Spring,MyBatis,Netty源码分析和大数据等多个知识点高级进阶干货的直播免费学习权限及领取相关资料,群号:835638062 点击链接加入群聊【Java高级架构】:https://jq.qq.com/?_wv=1027&k=5S3kL3v

ThinkPHP 8.1 + think-swoole 4.1 实战:5分钟搞定WebSocket聊天室(附完整代码) 本文详细介绍了如何使用ThinkPHP 8.1和think-swoole 4.1快速构建高并发WebSocket聊天室。通过5分钟实战教程,开发者可以轻松实现用户列表、消息广播等核心功能,支持2000+并发连接,适用于客服系统、在线协作等实时通信场景。 阅读详情

相关推荐

水环境综合管控平台完整方案

水环境综合管控平台项目(2026-2027)摘要 项目概况: 总投资5亿元的水环境综合管控平台项目,是国家数字政府与生态文明建设战略的重要实践。项目严格遵循2026年最新政策标准,整合物联网、大数据和AI技术,构建覆盖水质监测、污染溯源、生态保护等全流程的智能管控体系。 核心内容: 系统架构:采用五层设计(基础设施层至展示层),集成10大核心功能模块,包括水质动态监测、污染智能溯源和生态评估预警系统; 技术创新:运用2026年最新边缘计算和数字孪生技术,实现毫秒级水质异常响应和三维流域仿真; 实施规划:分7

随读手记 405

从zuul到springcloud gateway

为什么放弃springcloud zuul springcloud整合的是zuul1,包内没有引入netty,而springcloud netflix停止维护,zuul2至今未整合到spring,在高并发时zuul1的BIO模型可能会出现性能瓶颈。SpringCloud 最后自己研发了一个网关替代 Zuul1,那就是 SpringCloud Gateway,它是基于 WebFlux 框架实现的,而 WebFlux 框架底层则使用了高性能的 Reactor 模式通信框架 Netty。有图有真相!

MJ的博客 2119

qcom bypass node介绍

介绍qcom bypass node,以及如何让其生效

haodada1226的博客 2043

微服务网关Zuul迁移到Spring Cloud Gateway教程汇总

zhaoyang10的专栏 2282

专有钉钉小程序(浙政钉)开发搭建流程总览

最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑!

m0_53910290的博客 6356

Android功耗系列专题理论之十一:高通QCOM平台待机功耗问题分析方法

本文详细介绍了高通QCOM平台待机功耗问题的分析方法。首先强调测试环境标准化的重要性,包括关闭无线功能、日志记录和非必要传感器。重点分析了硬件连接检查、驱动配置验证、电源管理策略优化等关键步骤。文章详细讲解了射频校准、时钟源/中断分析、子系统状态检查等专业技术方法,并提供了具体的命令行操作示例。此外还介绍了外设拆解、外灌电压测试等硬件排查手段,以及功耗分解板、波形分析等高级诊断技术。最后强调了固件版本验证和环境因素测试的必要性,为工程师提供了系统性的功耗问题排查思路。

771

Zuul迁移至Spring Cloud Gateway踩坑记录

Zuul1.x已经不维护了,需要迁移。这里记录一下从Zuul1.x迁移到Spring Cloud Gateway 3.x遇到的坑

BLF2 2272

【C语言学习疑难杂症】第20期:0x00007FF7F2821964处引发的异常0xC0000005写入位置 0x0000000000000

检查代码中是否存在野指针访问的情况,确保在进行写入操作之前,内存已经被正确分配或初始化,并且在使用完毕后进行了正确的释放。空指针访问:代码尝试在空指针地址(0x0000000000000000)处进行写入操作,导致访问冲突。检查代码中是否存在数组越界的情况,确保在进行写入操作之前,数组的索引值在合法范围内。检查代码中是否存在空指针访问的情况,确保在进行写入操作之前,指针已经被正确初始化。野指针访问:代码尝试在已释放或未初始化的内存地址进行写入操作,导致访问冲突。

学无止境 828

Spring Cloud Gateway 简介及使用

Gateway是什么 Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。网关作为流量的,在微服务系统中有着非常作用,网关常见的功能有路由转发、权限校验、限流控制等作用。 特性 基于Spring 5,Reactor(模式) 和 SpringBoot 2.0 能够在任何请求属性上匹配路由 断言和过滤器是特定于路由的 Hystrix断路器集成...

weixin_44100455的博客 1万+

【AI for Medecine】吴恩达医学图像AI专项课程(诊断、预测、治疗)

近期需要简单了解AI4Science上的一些应用,看到吴恩达大佬的专项课程,于是开始来个“全面”的了解--医学人工智能(诊断、预测、治疗)。

图挖掘领域,新晋砖家 ☞ 未来可期,欢迎和静静一起学习交流吖 772

基于STM32设计的太阳能智慧路灯_444

本文设计并实现了一种基于 STM32 的太阳能智慧路灯系统。系统以 STM32F103C8T6 单片机为核心,集成温湿度检测、空气质量检测、环境光照检测、行人检测和路灯故障检测等功能,实现对路灯运行环境和工作状态的实时感知。

462

Gateway网关详解及实践---SpringCloud组件(五)

Spring Cloud GateWay是Spring Cloud的⼀个全新项⽬,⽬标是取代Netflix Zuul, 它基于Spring5.0+SpringBoot2.0+WebFlux(基于⾼性能的Reactor模式响应式通信 框架Netty,异步⾮阻塞模型)等技术开发,性能⾼于Zuul,官⽅测试,GateWay是 Zuul的1.6倍,旨在为微服务架构提供⼀种简单有效的统⼀的API路由管理⽅式。

weixin_43811057的博客 2217

2026华为OD面试题029:勇攀数字高峰

在给定的数字地形图里寻找登山路径,数字代表当前位置的海拔高度。要求从最低海拔出发,不断攀登,最终到达最高山峰。地图保证最低海拔和最高山峰都只有一个。 登山规则: - 路径上的海拔必须严格递增 - 只能向上下左右 4 个方向移动 - 路径必须从最低海拔开始,到最高海拔结束 - 每个地点只能走一次 - 每一步的攀登高度差必须大于 0,且不超过指定值 `K` 输出满足条件的登山路径的数量。

琅嬛福地 116

zuul网关找不到服务_微服务网关Zuul迁移到Spring Cloud Gateway

背景在之前的文章中,我们介绍过微服务网关Spring Cloud Netflix Zuul,前段时间有两篇文章专门介绍了Spring Cloud的全新项目Spring Cloud Gateway,以及其中的过滤器工厂。本文将会介绍将微服务网关由Zuul迁移到Spring Cloud Gateway。Spring Cloud Netflix Zuul是由Netflix开源的API网关,在微服务架构下...

weixin_35004618的博客 340

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

参数 微服务的全局_微服务网关Zuul迁移到Spring Cloud Gateway

背景在之前的文章中,我们介绍过微服务网关Spring Cloud Netflix Zuul,前段时间有两篇文章专门介绍了Spring Cloud的全新项目Spring Cloud Gateway,以及其中的过滤器工厂。本文将会介绍将微服务网关由Zuul迁移到Spring Cloud Gateway。Spring Cloud Netflix Zuul是由Netflix开源的API网关,在微服务架构下...

weixin_30216901的博客 130

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

zuul网关_微服务网关Zuul迁移到Spring Cloud Gateway

背景在之前的文章中,我们介绍过微服务网关Spring Cloud Netflix Zuul,前段时间有两篇文章专门介绍了Spring Cloud的全新项目Spring Cloud Gateway,以及其中的过滤器工厂。本文将会介绍将微服务网关由Zuul迁移到Spring Cloud Gateway。Spring Cloud Netflix Zuul是由Netflix开源的API网关,在微服务架构下...

weixin_39732866的博客 273

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

微服务架构下的API网关选型:Spring Cloud Gateway vs Netflix Zuul(2023最新对比)

本文深度对比了微服务架构下两大主流API网关:Spring Cloud Gateway与Netflix Zuul。从设计哲学、核心特性、性能表现到生态系统,全面解析了各自的优劣与适用场景,为2023年的技术选型提供实战指南,帮助架构师根据高并发、异步非阻塞等具体需求做出明智决策。

fern8的博客 443

微服务网关Zuul和Spring Cloud Gateway的区别

【前言】时下最流行的微服务框架springcloud中的早期的网关组件Zuul和springcloud新的网关组件gateway到底有啥区别?以前一直在用zuul。刚才读到掘金上面的一篇文章,算是讲清楚了二者的区别。写此博文的目的在于记录这篇文章,方便日后自己查看;同时也是将该资源分享给更多需要的人。下面附上原博主的链接; 【博主链接】 微服务网关Zuul和Spring Cloud Gateway...

吾本樵夫 的技术专栏 8948

Spring Cloud微服务中的API网关:从Zuul到Spring Cloud Gateway的全面进化

API网关选型指南:Spring Cloud Gateway vs Zuul 摘要:本文对比微服务网关技术,揭示Zuul因阻塞式架构导致的性能瓶颈(仅500-1000 QPS)与维护风险(Netflix已弃用),推荐Spring Cloud Gateway的响应式非阻塞方案(支持10,000+ QPS)。通过电商系统案例,展示Gateway动态路由、JWT认证等核心功能实现,并提供从Zuul迁移的实践路径。关键结论:Gateway在性能、扩展性和生态支持上全面超越Zuul,是微服务网关的现代化选择。

刘一说的IT专栏 1992

SpringCloud中Zuul(1.x版本)与Gateway在配置路由方式中的区别

一、背景:由于最近在开发的工程中,需要在微服务架构中要加入websocket组件进行前端数据实时刷新功能,最开始项目中利用的时zuul1.x作为网关服务,由于zuul1.x是基于阻塞的,这导致websocket始终无法穿透zuul网关,在找了很多解决方案后,利用了socket.js基本可以解决问题,基于网上的 : https://github.com/mthizo247/spring-cloud-...

qq_36608921的博客 2697

Spring Cloud微服务架构中的API网关选型指南

新项目首选Spring Cloud Gateway- 官方推荐,与Spring生态完美集成遗留系统视情况选择- 评估迁移成本,考虑渐进式改造极端性能要求考虑Kong/APISIX- 非Java技术栈,但性能卓越云原生环境关注K8s集成- Traefik、APISIX Ingress等团队技术栈熟悉程度性能要求和系统规模运维能力和基础设施未来扩展性需求你的项目中目前使用什么网关?遇到了哪些问题?如果要从Zuul迁移到Spring Cloud Gateway,最大的挑战是什么?

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1240
上一篇: 像SpringMVC一样在Android上做Web开发
下一篇: 阿里P8Java架构师是如何规划架构体系的呢?
普通网友
博客等级 码龄8年 55粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值